2017-03-04 49 views
1

我正在使用Python研究一些分子動力學,而且這些數組往往會變得非常大。如果能快速檢查某些向量是否出現在陣列中,將會有所幫助。 經過尋找的方式來做到這一點,我很驚訝地看到這個問題似乎並沒有出現。 尤其 如果我有像確定一個特定的,有序的矢量是否在一個列表/數組中

import numpy as np 
y = [[1,2,3], [1,3,2]] 
x = np.array([[1,2,3],[3,2,1],[2,3,1],[10,5,6]]) 

,我想看看從y中的特定載體存在於X(不只是元素),我會怎麼做呢? 使用類似

for i in y: 
    if i in x: 
     print(i) 

將簡單地返回包含i。至少一種元素每Y個陣列矢量。 想法?

+0

如果向量的數量可能變大並且您希望它變得很快,我會使用哈希表進行研究。需要你的向量和字典的散列函數。 –

+0

但列表和數組不可哈希! – hpaulj

+0

那麼你對x和y有什麼期望?訂單是否重要? x的典型形狀是什麼? 'y'的len? – hpaulj

回答

1

如果你想檢查是否在y所有矢量都存在數組中,你可以嘗試:

import numpy as np 
y = [[1,2,3], [1,3,2]] 
x = np.array([[1,2,3],[3,2,1],[2,3,1],[10,5,6]]) 

all(True if i in x else False for i in y) 
# True 
0

你不明確地給你預期的輸出,但我推斷你想看的[1,2,3]作爲該程序的輸出。

如果您僅使x爲另一個列表而不是NumPy數組,您將獲得該輸出。

0

最好的策略將取決於尺寸和數量。快速解決方案是

[np.where(np.all(x==row, axis=-1))[0] for row in y] 
# [array([0]), array([], dtype=int64)] 

結果列表爲y中的每一行給出了x在行中出現的可能爲空的位置數組。

相關問題