2014-09-16 18 views
40

Ben numpy ile yeni başlayan biriyim ve uzun numpy dizisinden bazı verileri ayıklamak çalışıyorum. Yapmam gereken şey dizimdeki tanımlı bir konumdan başlamak ve dizimin sonuna kadar o konumdan her bir veri noktasını örneklemek. Ben Nümerik bir dizide her nth girişi örnekleme

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

Sadece, Sen numpy's slicing kullanabilirsiniz

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

cevap

72

gibi bir şey üretmek için, orada her dördüncü noktası a[1] başlar ve daha sonra örnek Bu numune istiyorum vardı temelde eğer

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 görünümü orijinal verilerin yaratır, bu yüzden sabit zaman bu.

>>> 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]) 
: Yukarıdaki şeylerin ya bir sorun varsa
>>> 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]) 

böylece, açıkça bir kopyasını oluşturabilirsiniz: Aynı zamanda orijinal diziye değişiklikleri yansıtmak ve bellekte tüm orijinal diziyi devam edeceğiz

Bu sabit bir zaman değil, ancak sonuç orijinal diziye bağlı değil. Kopya ayrıca hafızada da çalışır, bu da bazı işlemleri daha hızlı yapabilir.

+0

Referans/değer kopyasıyla ilgili uyarı için teşekkür ederiz. aksi halde kesinlikle tuzağa düşecektim – Chris