在numpy对象数组中搜索

时间:2014-06-30 14:34:22

标签: python arrays numpy

我有<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

  1. 我无法控制对象数组,因此不太可能是方形数据。
  2. 我需要[row]/[col]
  3. 中存在的nd.array索引

2 个答案:

答案 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]))