2016-05-10 44 views
1

我不知道如何描述這個,所以我只顯示它。Numpy.where()在其條件中有一個數組

我如何做到這一點...

for iy in random_y: 
    print(x[np.where(y == iy)], iy) 

    X  y 
[ 0.5] : 0.247403959255 
[ 2.] : 0.841470984808 
[ 49.5]: -0.373464754784 

沒有for循環,我得到一個解決方案,當您使用np.where()array[cond]像一個單一的陣列。既然你知道,這是Python的B)

注:爲什麼我想這樣做的原因是因爲我有Y值的隨機子集,我想找到相應的X值。

+0

是在值'y'獨特之處? – unutbu

+0

是的每個y值都是唯一的 – SARose

回答

2

如果您正在尋找精確的匹配,你可以簡單地使用np.in1d,因爲這是一個完美的情況下其使用情況,像這樣 -

first_output = x[np.in1d(y,random_y)] 
second_output = random_y[np.in1d(random_y,y) 

如果您正在處理浮點數,你可能需要使用一些耐受因子進入比較。因此,對於這樣的情況下,你可以使用NumPy broadcasting然後用np.where,像這樣 -

tol = 1e-5 # Edit this to change tolerance 
R,C = np.where(np.abs(random_y[:,None] - y)<=tol) 

first_output = x[C] 
second_output = random_y[R] 
+0

看起來不錯,現在就測試一下。這個或類似的方法是否推廣到二維數組? (PS:我希望我可以加倍大拇指!) – SARose

+0

@SARose因此,對於2D數組,您需要決定是否通過「==」來表示所有行中的元素或行中的任何元素,假設您想要一個基於行的比較。如果你真的想把它擴展到2D,最好在問題中發佈一個樣例,或者完全發佈一個新問題,因爲它不是一個簡單的擴展。 – Divakar

+0

好吧我會發佈一個案例。但是,我確實需要一個數組中的所有元素與另一個數組中的所有元素匹配。 – SARose

0

也許這可能做的伎倆(未測試):

print(Str(x[np.where(y == iy)]) + " " + Str(iy) + "\n") for iy in random_y

相關問題