【问题标题】:Check value of numpy array at index [duplicate]检查索引处的numpy数组的值[重复]
【发布时间】:2019-05-11 18:28:51
【问题描述】:

我最近开始使用 numpy.我正在尝试测试二维数组是否包含特定的子数组。下面的代码返回错误。我该如何解决这个问题?

import numpy as np

testArray = np.array([[None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0]])

for i in range(len(testArray)):
    if (testArray[i] == [None, 0]):
        print(i)

【问题讨论】:

    标签: python arrays numpy indexing


    【解决方案1】:

    好吧,您的“[None, 0]”之一是一个列表,您将其与一个没有多大意义的数组进行比较。 因此,如果您想修复代码,则可以通过以下方式访问值:

    import numpy as np
    
    testArray = np.array([[None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0]])
    
    for i in range(len(testArray)):
        if (testArray[i][0] == None and testArray[i][1] == 0):
            print(i)
    

    【讨论】:

    • 作为另一个答案,在这种方法中绝对没有用 numpy
    • 他们在哪里要求在方法中使用 numpy?
    • 这是一个 numpy 数组,他们说他们正在学习 numpy?
    • 一个是列表,另一个是numpy数组,我会调整答案
    • 他特别说明他使用的是numpy。我刚刚修复了代码,我不知道他为什么要那样做。但他从未告诉我们他真正想要达到的目标,我不知道。
    【解决方案2】:

    无需迭代,就可以全部使用:

    >>> testArray[(testArray == [None,0]).all(1)]
    array([[None, 0],
           [None, 0],
           [None, 0],
           [None, 0],
           [None, 0],
           [None, 0],
           [None, 0],
           [None, 0]], dtype=object)
    

    或者,如果您只是想查看该子数组是否存在,请另外使用any

    >>> (testArray == [None,0]).all(1).any()
    True
    

    【讨论】:

      【解决方案3】:

      您看到的错误是值错误。当您比较 numpy 数组时,您会得到一个由布尔值组成的数组。问题是您使用该数组作为您的条件,这导致了值错误,因为数组的真值不明确。您可以使用.any.all 进行解析,具体取决于您是否关心数组中是否存在所有元素。

      试试这个:

      testArray = np.array([[None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0], [None, 0]]) 
      
      for i in range(len(testArray)): 
          containsValue = (testArray[i] == [None, 0]).all()
          if (containsValue): 
              print(i) 
      

      【讨论】:

      • 您也可以使用列表,这不使用任何 numpy 功能。它实际上会比使用列表慢。
      • 他们没有要求优化速度,他们只是说他们的代码有错误。
      • 大概他们不会在外部依赖中分层以使他们的代码比原生 Python 慢
      • 我无法假装知道提问者在想什么。他们的代码有错误,我的回答解决了上述错误。
      猜你喜欢
      • 2014-10-05
      • 2017-03-08
      • 2018-10-25
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多