Python numpy,其中dtype=object的数组上的命令

Python numpy,其中dtype=object的数组上的命令,python,numpy,Python,Numpy,我试图理解以下几点: import numpy as np foo = np.array([np.array([0, 2, 3]), np.array([0, 2, 3]), np.array([4, 4]), 4], dtype=object) np.where(foo == 4) 返回一个空列表(数组([],dtype=int64),)。但我可以清楚地看到,第四个元素是4: foo[3] == 4 True 那么,我如何才能找到foo中元素的索引,这些索引等于某个值,而不必在其中循环?嵌

我试图理解以下几点:

import numpy as np
foo = np.array([np.array([0, 2, 3]), np.array([0, 2, 3]), np.array([4, 4]), 4], dtype=object)
np.where(foo == 4)
返回一个空列表
(数组([],dtype=int64),)
。但我可以清楚地看到,第四个元素是4:

foo[3] == 4
True

那么,我如何才能找到foo中元素的索引,这些索引等于某个值,而不必在其中循环?

嵌套的
np.array
以某种方式干扰了元素状态
==4
。嵌套普通列表效果很好:

将numpy导入为np
foo=np.array([[0,2,3],[0,2,3],[4,4],4],dtype=object)
其中(foo==4)

但我不知道为什么会有不同。

我相信这就是发生的事情:

在NumPy数组上使用比较运算符时,它返回一个与输入数组形状相同的布尔数组。每个值都是bool(x[i]==4)

如果你有一份清单,你会得到

>>bool([4,4,4]==4)
假的
使用numpy阵列,您可以获得:

bool(np.array([4,4,4])==4) --------------------------------------------------------------------------- ValueError回溯(最近一次调用上次) 在() ---->1布尔(np.数组([4,4,4])==4) ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all() 我本以为numpy会传播这个错误,但事实并非如此。出于某种原因,它决定将整个表达式计算为False。也许值得在numpy问题追踪器上提出来

至于解决你的问题。。。在对象数组中是否有任何方法可以使用列表而不是数组?我想不出别的办法来逃避它

编辑:我在


Edit2:据numpy开发者称,当前版本的numpy在这种情况下会发出警告,而未来版本在元素比较失败时会发出ValueError。

odd。。。
=
比较似乎没有广播。我不确定为什么
foo==4
返回
False
,而不是返回一个对象数组,或者抱怨数组中包含多个元素的真值。我想我需要这些数组而不是列表。现在,我将只使用
[I For I,val in enumerate(foo)(如果val为4)]
。从numpy问题来看:当前行为似乎已被弃用,并将在将来导致ValueError。