Python 基于子数组的子数组在Numpy数组中搜索子数组的索引
我想获取包含特定数组的2d数组的索引。在这种情况下,我想知道数组Python 基于子数组的子数组在Numpy数组中搜索子数组的索引,python,arrays,numpy,multidimensional-array,numpy-ndarray,Python,Arrays,Numpy,Multidimensional Array,Numpy Ndarray,我想获取包含特定数组的2d数组的索引。在这种情况下,我想知道数组中的哪个位置数组[[4,5],6]只基于最里面的数组[4,5],这样我就可以得到它的位置,即使它不是6而是8 这是我目前的代码: import numpy as np array = np.array([[[1, 2], 3], [[4, 5], 6], [[7, 8], 9]]) print(np.where(array == [4, 5])) 但作为输出,我得到: (array([], dtype=int32), arra
中的哪个位置数组[[4,5],6]
只基于最里面的数组[4,5]
,这样我就可以得到它的位置,即使它不是6而是8
这是我目前的代码:
import numpy as np
array = np.array([[[1, 2], 3], [[4, 5], 6], [[7, 8], 9]])
print(np.where(array == [4, 5]))
但作为输出,我得到:
(array([], dtype=int32), array([], dtype=int32))
我想要的输出如下:
(array([1], dtype=int32), array([0], dtype=int32))
问题是您使用的是一个dtype对象,其中第一个numpy列包含列表对象
您可以创建一个矢量化函数
,以单独检查每个对象
f = np.vectorize(lambda x: x==[4,5])
idx = np.where(f(array))
idx
在展平阵列,然后对照[4,5]
检查每个对象之后,也可以使用列表理解。然后您可以使用np.where
或简单的布尔检查来获取平面列表中的索引,您可以分解索引
来获取二维数组中的位置。(我正在使用np.where
,因为您想使用它)
其中
仅与布尔参数相同。什么是数组==[4,5]
?为此,请查看(并打印)array
。确保你确切知道那是什么。你试过用列表做这个吗?这里的矢量化实际上会非常慢,它只是一个方便的循环包装器。你完全正确,这就是为什么我提供了另一种方法。在任何情况下,python都不是适合性能的语言,而只是可读性。第一个方法可读性很强。@user3483203,因为这是一个对象数据类型数组,所以大多数操作以列表理解速度进行<代码>矢量化
不会慢很多frompyfunc
更接近列表速度。
(array([1]), array([0]))
check = [i==[4,5] for i in array.ravel()]
np.unravel_index(*np.where(check), array.shape)
(array([1]), array([0]))