【问题标题】:Numpy array indexing syntaxNumpy 数组索引语法
【发布时间】:2021-05-27 11:16:53
【问题描述】:

我正在学习numpy,并对数组索引中使用的语法感到困惑。例如:

arr[2, 3]

这意味着元素在第 3 行和第 4 列的交叉点。是什么让我在方括号内用逗号分隔不同索引感到困惑(如在函数参数中)。使用 python 列表这样做是无效的:

l = [[1, 2], [3, 4]]
l[1, 1]

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 TypeError:列表索引必须是整数或切片,而不是元组

那么,如果这不是一个有效的 python 语法,numpy 数组是如何工作的?

【问题讨论】:

  • 问题是l是一个列表,而不是一个numpy数组
  • arr[2,3] 将元组 (2,3) 传递给 arr.__getitem__ 方法。对于数组,该方法可以处理元组。列表索引方法不能,并且会引发 TypeError(不是 SyntaxError)。不同的类有不同的索引方法。此外,创建元组的是逗号。

标签: python numpy


【解决方案1】:

使用冒号 ':' 而不是逗号 ','。 在切片或索引中使用冒号':'

在你上面的例子中, l = [[1, 2], [3, 4]]

->l[0] 是 [1,2] 并且 -> l[1] 是 [3,4]

阅读更多文档以获得更好的理解。 谢谢你

【讨论】:

  • 这不能回答我的问题。请仔细阅读,因为我的问题是关于完全不同的事情
【解决方案2】:

在您给定的示例中,您将numpy 数组与列表列表进行比较。两者的主要区别在于numpy 数组在形状、其元素的数据类型等方面是可预测的,而列表可以包含任何其他 python 对象(列表、元组、字符串、等等)

以此为例,假设您创建了一个numpy 数组,如下所示:

arr = np.array([[0, 1], [2, 3], [4, 5]])

这里,arr 的形状在实例化“arr.shape 返回 (3,2)”后立即已知,因此您可以轻松地仅使用逗号分隔的方括号对数组进行索引。另一方面,以列表为例:

l = [[0, 1], [2, 3], [4, 5]]
l[0]   # This returns the list [0, 1]
l[0].append("HELLO")
l[0]   # This returns the list [0, 1, "HELLO"]

列表是非常不可预测的,因为无法知道每个列表元素会返回给您什么。因此,我们在列表列表中索引特定元素的方法是使用 2 个方括号“例如l[0][0]

如果我们创建了一个非统一的numpy 数组怎么办?好吧,您会得到与列表列表类似的行为:

arr = np.array([[0, 1], [2, 3], [4]])   # Here, you get a Warning! 
print(arr)  # Returns: array([list([0, 1]), list([2, 3]), list([4])], dtype=object)

在这种情况下,您不能使用 [0, 0] 索引 numpy 数组。相反,您必须使用两个方括号,就像列表列表一样

您也可以查看ndarray 的文档了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 2011-11-18
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2018-01-22
    相关资源
    最近更新 更多