给定m x n数值数组
X = np.array([
[1, 2],
[10, 20],
[100, 200]
])如何查找一行的索引,即10,20 -> 1?
N可以是任意的- 2,3,...,所以我可以有n x 3的数组
Y = np.array([
[1, 2, 3],
[10, 20, 30],
[100, 200, 300]
])因此,我需要传递一个大小为n的向量,在本例中为n=3,即向量10、20、30,以获得其行索引1?同样,n可以是任何值,比如100或1000。
块状数组可能很大,所以我不想使用.index()将它们转换为列表。
发布于 2021-08-15 22:42:30
以防查询数组包含您正在查找的重复行,在这种情况下,下面的函数将返回多个索引。
def find_rows(source, target):
return np.where((source == target).all(axis=1))[0]
looking = [10, 20, 30]
Y = np.array([[1, 2, 3],
[10, 20, 30],
[100, 200, 300],
[10, 20, 30]])
print(find_rows(source=Y, target=looking)) # [1, 3]发布于 2021-08-15 22:34:06
您可以使用numpy.equal,它将传播行向量并将其与原始数组的每一行进行比较,如果一行的所有元素都等于目标,则该行与目标相同:
import numpy as np
np.flatnonzero(np.equal(X, [10, 20]).all(1))
# [1]
np.flatnonzero(np.equal(Y, [10, 20, 30]).all(1))
# [1]发布于 2021-08-15 21:59:34
您可以创建如下函数:
def get_index(seq, *arrays):
for array in arrays:
try:
return np.where(array==seq)[0][0]
except IndexError:
pass然后:
>>>get_index([10,20,30],Y)
1或者只使用索引:
>>>np.where((Y==[10,20,30]).all(axis=1))[0]
1https://stackoverflow.com/questions/68795553
复制相似问题