Python 在numpy对象数组中搜索

Python 在numpy对象数组中搜索,python,arrays,numpy,Python,Arrays,Numpy,我有一个Numpy对象数组类型 但是当我使用numpy.where搜索数组中的特定值时,它不会返回任何内容,尽管它存在 >>> numpy.where(xt4=='D') (array([], dtype=int32),) 相反,我期望从数组中得到该值对应的[row]/[col]索引。这在int中运行良好,但在对象数组中搜索字符串时失败 编辑1 我无法控制对象数组,它不太可能是正方形数组 我需要[row]/[col]索引nd.数组中的值 你的问题是,NumPy并不像其他人那样

我有一个Numpy对象数组类型

但是当我使用numpy.where搜索数组中的特定值时,它不会返回任何内容,尽管它存在

>>> numpy.where(xt4=='D')
(array([], dtype=int32),)
相反,我期望从数组中得到该值对应的
[row]/[col]
索引。这在
int
中运行良好,但在对象数组中搜索字符串时失败

编辑1

  • 我无法控制对象数组,它不太可能是正方形数组
  • 我需要
    [row]/[col]
    索引
    nd.数组中的值

  • 你的问题是,NumPy并不像其他人那样真正支持锯齿数组。您可以创建它们,但它们并不总是以您期望的方式运行。
    如果数组中的每一行的长度相同,则它将按预期执行

    >>> xt4 = array([['D', 'F'], ['B', 'C']], dtype=object)
    >>> numpy.where(xt4=='D')
    (array([0]), array([0]))
    

    您拥有的是一个1D对象数组,此命令上的
    =
    操作符将尝试将对象与对象匹配。最简单的方法是:

    >>> xt4=='D'
    array([False, False], dtype=bool)
    
    Numpy试图将
    D
    ['D','F']
    ['B','C','E']
    匹配。您可以使用如下所示的字符数组:

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

    我明白你的意思,但我无法控制对象数组。因此,是否有任何方法可以搜索数组中的值并获得相应的索引?@PankajParashar您可以使用python循环来执行此操作,但我不相信有用于此操作的内置函数。加上该位置的“行/列”在这里没有多大意义,您不能使用numpy索引例程访问
    D
    元素。是的。我可以使用for循环,但我处理的卷很大,达到了100k。因此,我希望尽可能避免for循环。此外,我不明白为什么行/列位置对您没有意义?在这种情况下,预期的答案应该是row=0,col=0,这对我接下来要做的工作很有用。这有意义吗?@PankajParashar numpy数组通常是内存中连续的数据块。numpy对象数组只是指针数组。除非您可以将数据转换为非对象数组,否则大多数numpy例程将不适用于您。考虑寻找非均匀阵列。同意。它仍然没有回答我的问题:)还更新了我的问题以使其更清晰。
    >>> arr=='D'
    array([[ True, False, False],
           [False, False, False]], dtype=bool)
    >>> np.where(arr=='D')
    (array([0]), array([0]))