SORU
6 Aralık 2010, PAZARTESİ


Numpy dizisinde görünüm?

2D numpy bir dizi var. Bir şekilde k ilk satır ve sütunların yer alacağını üzerine bir görünüm oluşturmak için var mı?

Bu noktada temel verileri (dizi kısmi kopyalarını yapmak mümkün değildir o kadar büyüktür.) kopyalama önlemek için.

CEVAP
6 Aralık 2010, PAZARTESİ


Her zamanki gibi tabi, sadece dizin. E. g. y = x[:k, :] Bu orijinal diziye bir görünüm dönecektir. Veri kopyalanır, ve herhangi bir güncelleme y x ve tersi yansıtılır.


Düzenleme:

Ben sık ^ ile çalışır . 10 GB 3D bunu merak ediyorum yani uint8, bir sürü diziler... Numpy eğer aklınızda bir kaç şey tutmak bellek yönetimi çok etkili olabilir. Burada bellekte diziler kopyalarını yapmaktan kaçınarak: birkaç ipucu

*5, *, *=, **6 etc dizinin bir kopyasını yapmaktan kaçınmak için kullanın. E. g. x = 10 x = x 10 bir kopyasını alın ve değiştirin olurken yerine, dizinin değiştir. (ayrıca, bir bak numexpr)

Eğer sen yapmak ister bir kopyasını x = x 10, unutmayın x = x 10.0 neden x otomatik olarak up-döküm için bir kayan nokta dizi, eğer değildi zaten. x tamsayı dizisi nerede ancak, x = 10.0 aşağı-döküm aynı hassasiyeti yüksek bir int dizisi gibi olmak 10.0 yerine neden olur.

Ayrıca, birçok numpy fonksiyonları out parametre yerinde x mutlak değer np.abs(x, x) gibi şeyler yapabilirsiniz.


İkinci bir düzenleme olarak, burada daha fazla numpy diziler ile görüş vs kopyaları ipuçları birkaç:

Python listeleri, y = x[:] bir kopyasını döndürmez aksine bir görünüm verir. Eğer bir kopyasını, tabii ki, kullandığınız bellek iki katına olacak) isterseniz kullanın 20**

Sık sık" numpy diziler. "süslü dizin duymak ulaşabilirsiniz Bir liste (veya tam sayı dizisi) dizin olarak kullanıyor "süslü dizin". Çok yararlı olabilir, ama kopya veri.

Buna örnek olarak: y = x[[0, 1, 2], :] y = x[:3,:] bir görünüme geri dönmek isterken bir kopyasını verir.

Gerçekten x[4:100:5, :-10:-1, None] deli gibi dizin "dizin oluşturma ve yeni bir görünüm, ama geri dönmek, büyük dizilerinde Dilimleme hileler her türlü kullanın korkmayın." normal olmasına

x.astype(<dtype>)x.view(<dtype>) bir görünüm verecektir, ise yeni tip olarak verilerin bir kopyasını döndürür.

Buna dikkat et, ancak... ... son derece güçlü ve yararlı, ama temel veri hafızada saklanır nasıl anlamak gerekir. Eğer yüzen ve in olarak, (ya da tam tersi) bir dizi varsa numpy alttaki yorumlarbitin olarak dizinin.

Örneğin, bu demektir 1.0 gibi bir 64-bit platformuna biraz-indian sistemi olacak 4607182418800017408 görüntülenen gibi bir 64-bit tamsayı ve bir dizi [ 0, 0, 0, 0, 0, 0, 240, 63] eğer göründüğü haliyle bir uint8. Bu büyük diziler üzerinde bir çeşit bit öldürmek ne zaman yapmam gerekir gerçekten çok güzel, ama... ara bellek nasıl yorumlanacağını üzerinde düşük seviye kontrolü var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007
  • NYCarspotter

    NYCarspotter

    26 EYLÜL 2011
  • RomanAtwood

    RomanAtwood

    18 Kasım 2009