numpy dizisindeki her n'inci girişi alt örnekleme


96

Ben numpy ile yeni başlayan biriyim ve uzun bir numpy dizisinden bazı veriler çıkarmaya çalışıyorum. Yapmam gereken, dizimde tanımlı bir konumdan başlamak ve ardından bu konumdan dizimin sonuna kadar her n'inci veri noktasını alt örneklemek.

temelde sahip olsaydım

a = [1,2,3,4,1,2,3,4,1,2,3,4....] 

Başlamak için bunu alt örneklemek a[1]ve oradan her dört noktadan sonra örneklemek istiyorum.

b = [2,2,2.....]

Yanıtlar:


163

Sen kullanabilirsiniz numpy en dilimleme basitçe start:stop:step.

>>> xs
array([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4])
>>> xs[1::4]
array([2, 2, 2])

Bu , orijinal verilerin bir görünümünü oluşturur , bu nedenle sabit bir zamandır . Ayrıca, orijinal dizideki değişiklikleri yansıtır ve tüm orijinal diziyi bellekte tutar:

>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2]         # O(1), constant time
>>> b[:] = 0           # modifying the view changes original array
>>> a                  # original array is modified
array([0, 2, 0, 4, 0])

bu nedenle, yukarıdakilerden herhangi biri sorun oluşturuyorsa, açıkça bir kopya oluşturabilirsiniz:

>>> a
array([1, 2, 3, 4, 5])
>>> b = a[::2].copy()  # explicit copy, O(n)
>>> b[:] = 0           # modifying the copy
>>> a                  # original is intact
array([1, 2, 3, 4, 5])

Bu sabit zaman değildir, ancak sonuç orijinal diziye bağlı değildir. Kopya ayrıca bellekte bitişiktir, bu da üzerinde bazı işlemleri hızlandırabilir.


1
referans / değer kopyası hakkındaki uyarı için teşekkür ederiz. aksi halde kesinlikle tuzağa düşecektim
Forever
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.