Python 基于子数组的子数组在Numpy数组中搜索子数组的索引

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

我想获取包含特定数组的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), 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]))