[英]Find location of pair of elements in two arrays in numpy
我有兩個numpy
數組x
和y
假設x = [0, 1, 1, 1, 3, 4, 5, 5, 5]
0,1,1,1,3,4,5,5,5 x = [0, 1, 1, 1, 3, 4, 5, 5, 5]
和y = [0, 2, 3, 4, 2, 1, 3, 4, 5]
兩個數組的長度是相同的,我正在尋找的坐標對肯定存在於數組中。
如何在這些數組中找到(a, b)
的索引,其中a
是x
的元素, b
是y
的對應元素。 例如, (1, 4)
的索引將是3
: x
和y
索引3
處的元素分別是1
和4
。
你可以使用numpy.where
結合numpy.logical_and
如果你想要一個純粹的numpy
解決方案:
In [16]: import numpy as np
In [17]: x = np.array([0, 1, 1, 1, 3, 4, 5, 5, 5])
In [18]: y = np.array([0, 2, 3, 4, 2, 1, 3, 4, 5])
In [19]: np.where(np.logical_and(x == 1, y == 4))[0]
Out[19]: array([3], dtype=int64)
numpy.logical_and
允許您以元素方式執行兩個numpy數組之間的邏輯AND操作。 我們在這里做的是確定哪些位置包含x
值為1且y
值在相同的相應位置為4。 那些滿足這個要求的地方是True
。 numpy.where
確定滿足此條件的數組中的位置。 numpy.where
實際上將條件為True
行和列位置分別作為兩個元素的元組返回,但由於我們只考慮一個維度,因此只有第一個元組有效,這就是我們立即索引第一個元素的原因。元組。
輸出是條件有效的numpy
位置數組。 您甚至可以進一步強制輸出為索引列表以使事情更整潔和/或是否需要(感謝@EddoHintoso):
In [20]: list(np.where(np.logical_and(x == 1, y == 4))[0])
Out[20]: [3]
您可以將第一個數組與第一個數值進行比較,將第二個數組與第二個數據進行比較,然后找到兩個True
。 然后你可以用argmax
得到那個True
,這將給你第一個True
發生的第一個索引:
x = np.array([0, 1, 1, 1, 3, 4, 5, 5, 5])
y = np.array([0, 2, 3, 4, 2, 1, 3, 4, 5])
idx = ((x == 1) & (y == 4)).argmax()
In [35]: idx
Out[35]: 3
In [36]: x == 1
Out[36]: array([False, True, True, True, False, False, False, False, False], dtype=bool)
In [37]: y == 4
Out[37]: array([False, False, False, True, False, False, False, True, False], dtype=bool)
如果您可能有多次出現,可以使用以下nonzero
:
idx_list = ((x == 1) & (y == 4))
idx = idx_list.nonzero()[0]
In [51]: idx
Out[51]: array([3], dtype=int64)
或者如果您需要索引list
:
In [57]: idx_list.nonzero()[0].tolist()
Out[57]: [3]
您可以在一行中執行以下操作:
idx = ((x == 1) & (y == 4)).nonzero()[0]
x = [0, 1, 1, 1, 3, 4, 5, 5, 5]
y = [0, 2, 3, 4, 2, 1, 3, 4, 5]
w=zip(x,y)
w.index((1,4))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.