簡體   English   中英

在numpy中找到兩個數組中元素對的位置

[英]Find location of pair of elements in two arrays in numpy

我有兩個numpy數組xy

假設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)的索引,其中ax的元素, by的對應元素。 例如, (1, 4)的索引將是3xy索引3處的元素分別是14

你可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM