簡體   English   中英

從numpy矩陣中查找值列表的行方向索引

[英]Find the row-wise index of a list of values from numpy matrix

有沒有一種聰明的方法可以使用numpy找到矩陣中值列表的索引? 我們總是可以以迭代的方式完成它,但有沒有快速而快速的方法可用?

我們有一個矩陣:

[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

和一份清單:

[3,4,7,11]

我們在這里需要的是矩陣的相應行中的3,4,7和11的索引,即[2,0,0,1]

顯然,這是一個用迭代方法編寫的簡單代碼,但我們正在尋找任何現成的實現。

提前致謝。

對於您的示例,這有效:

In [17]: import numpy as np

In [18]: a = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])

In [19]: l = [3,4,7,11]

In [20]: np.where(a == np.array(l)[:, None])[1]
Out[20]: array([2, 0, 0, 1])

您可以使用numpy.argwhere來獲得所需的索引

import numpy as np

arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
search_list = [3,4,7,11]
index_arr = [np.argwhere(arr==x).flatten()[1] for x in search_list]
#index_arr [2, 0, 0, 1]

這是@ Akavall解決方案的重復安全版本。 如果有多個值出現,則返回第一個索引:

a = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
b = [3,4,7,11]

# introduce a repeated value 
a[1][1] = a[1][0]
a
# [[1, 2, 3], [4, 4, 6], [7, 8, 9], [10, 11, 12]]

i, j = np.where(a == np.c_[b])
j[i.searchsorted(range(len(b)))]
# array([2, 0, 0, 1])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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