2016-04-04 6 views
0

1D dizim var ve bir histogramı çizerek ve bunu bir Gaussian ile uyduruyorum. Gürültü haritası üzerinde bir sinyal oluşturmak istiyorum (gaussian'dan bir sigma ölçeği ile). Çeşitli yerlerde 0 değerine sahibim ancak yalnızca < 0 ve> 0 değerlerini korumak istiyorum.1D dizisinden bir değer çıkartın

Komutumu böyle yazabilir miyim?

new_SN_map = temp_SN_map[(temp2_SN_map < 0) & (temp_SN_map > 0)] 

0 değerini otomatik olarak silmek için bir yol var mı?

cevap

2

gelecek okuyucular için ben daha genel hale getirmek için diziyi yeniden adlandırmak gerekir:

array = temp_SN_map 

sorununuzu ilgili olarak, farklı yolları vardır.

new_array = array[(array < 0) & (array > 0)] 

Ama alternatifler vardır: Yeni başlayanlar için Teklifiniz çalışacak

new_array = array[array != 0]  # using only one comparison 

new_array = array[np.nonzero(array)] # using np.nonzero 

new_array = array[np.where(array)] # using np.where 
  • 1np.nonzero() özellikle sıfır olmayan değerler hariç için hazırlanmıştır kullanma. np.where()2 veya != 0 kullanma

  • bir özel değeri hariç içindir. Belirli bir aralığı hariç tutmak istiyorsanız, numaralı telefonu kullanmak iyi bir yöntemdir.

Bildirimi ancak bunlardan birbirlerine olanları yapıyoruz her şeyi yapabilirsiniz, böylece okunabilir/en uygun olduğunu düşündüğü ne birincil bağlıdır ya da verimlilik veriyorsan en hızlı ne de zaman gerekiyor.

+0

Daha ayrıntılı bir sorum var. 2D dizilim olduğunu varsayarsak. Bu işlemi uygularken neden 2D dizisi 1D dizisi oluyor? – Deadpool

+0

çünkü numpy yalnızca 2B dizileri boşluklarla işleyebilir, bu yüzden ** bunları ** 1D'ye dönüştürmelidir. Koordinat bilgilerini saklamak için 'np.mgrid' veya' np.ogrid' kullanabilirsiniz. – MSeifert

1
foo is your 1D numpy array. 

foo[np.where(foo != 0)]