2017-06-14 31 views
-1

我看到numpy的'where'函數到處都有討論,但我仍然不明白。我有數以千計的(x,y,z)向量(x,y和z,在-1和1之間)的數組/列表。我需要那些向量,例如,y是< .25,z>。 90。而x不是== 0.Python:爲什麼how/where/where np.where

你會怎麼做?

+0

您能否以正確的類型和形狀提供所需輸入/輸出的示例? – Mephy

回答

1

np.where有兩種用法,一種用1個參數,另一種用3.它聽起來像你對1參數情況感興趣,這只是np.nonzero的另一個名稱。

你提到vectors,所以我假設你對1d數組感興趣,而不是稍微複雜的2d或更高的情況。

這裏有兩個基本的例子:

In [320]: np.where([1, 0, .2, 3, .222, 0]) 
Out[320]: (array([0, 2, 3, 4], dtype=int32),) 

注意1和5缺失 - 這些都是0的指數。

In [321]: np.nonzero([True, False, False, True]) 
Out[321]: (array([0, 3], dtype=int32),) 

0和3是2個真值的指數。

一個wherenonzero涉及y is < .25, z > .90. and x is not == 0減少在真/假瓦萊斯的發現邏輯表達式的真值的索引,

(y < .25) & (z > .90) & (x != 0) 

所以,如果你想知道什麼where/nonzero是幹什麼的,先來看看condition表達式。它所做的只是告訴我們where表達式是真實的。

In [327]: x=np.linspace(-2,2,5); y=np.linspace(0,1,5); z=np.linspace(.5,1,5) 
In [328]: (y<.25)&(z>.9)&(x!=0) 
Out[328]: array([False, False, False, False, False], dtype=bool) 
In [329]: (y<.25)|(z>.9)|(x!=0) 
Out[329]: array([ True, True, False, True, True], dtype=bool) 
In [330]: np.where((y<.25)|(z>.9)|(x!=0)) 
Out[330]: (array([0, 1, 3, 4], dtype=int32),) 

現在處理'數千個向量'變得更加複雜。這些'矢量'是獨立的嗎?或者它們是二維數組的'行'還是什麼?

0

的數據看起來像這樣(舉例):

['17:54:03:421801', -0.714, 0.0114, 0.196] 
['17:54:03:438803', 0.312, -0.0244, 0.312] 
['17:54:03:444301', 0.137, -0.263, 0.908] 
[...etc...] 

時間戳是不是一個真正的首要關注的問題,但它需要保持。一個小文件可能是10,000行,每天有多個文件。所以,我需要'where'的指數,比如y是<.25和z> 0.90。並且x!= 0.

或者更一般地:其中a1和a2以及a3。

應該如何接近?誰會用這個做什麼?時間比內存使用更重要。我想用Python做到這一點,但我應該跳轉到C語言,我的母語嗎?

線索?思考?建議?