我有<type 'numpy.ndarray'>
类型的 Numpy Object Array ,
>>> xt4
array([['D', 'F'], ['B', 'C', 'E']], dtype=object)
但是当我使用 numpy.where 搜索数组中的特定值时,它会返回任何内容,尽管它存在。
>>> numpy.where(xt4=='D')
(array([], dtype=int32),)
相反,我期待数组中该值的相应[row]/[col]
索引。这适用于int
,但在搜索对象数组中的字符串时失败。
修改1
[row]/[col]
。nd.array
索引
醇>
答案 0 :(得分:1)
您拥有的是一维对象数组,此命令上的==
运算符将只是尝试将对象与对象匹配。最简单的方法就是这样:
>>> xt4=='D'
array([False, False], dtype=bool)
Numpy试图将D
与['D', 'F']
和['B', 'C', 'E']
进行匹配。您可以像这样使用char数组:
>>> arr = np.array([['D', 'F', 'G'], ['B', 'C', 'E']])
>>> arr
array([['D', 'F', 'G'],
['B', 'C', 'E']],
dtype='|S1')
任何类型的布尔索引都可以正常工作:
>>> arr=='D'
array([[ True, False, False],
[False, False, False]], dtype=bool)
>>> np.where(arr=='D')
(array([0]), array([0]))
答案 1 :(得分:0)
你的问题是NumPy并不像其他人那样真正支持锯齿状阵列。你可以创造它们,但它们并不总是以你期望的方式表现 如果数组中的每一行长度相同,那么它将按预期执行。
>>> xt4 = array([['D', 'F'], ['B', 'C']], dtype=object)
>>> numpy.where(xt4=='D')
(array([0]), array([0]))