python - Numpy 数组索引语法
问题描述
我正在学习numpy
新的知识并对数组索引中使用的语法感到困惑。例如:
arr[2, 3]
这意味着元素位于第 3 行和第 4 列的交叉点。是什么让我在方括号内用逗号分隔不同索引感到困惑(如在函数参数中)。使用 python 列表这样做是无效的:
l = [[1, 2], [3, 4]]
l[1, 1]
Traceback(最近一次调用最后一次):文件“”,第 1 行,类型错误:列表索引必须是整数或切片,而不是元组
那么,如果这不是一个有效的 Python 语法,那么 numpy 数组是如何工作的呢?
解决方案
在您给定的示例中,您将numpy
数组与列表列表进行比较。两者的主要区别在于,numpy
数组在形状、元素的数据类型等方面是可预测的,而列表可以包含任何其他 python 对象(列表、元组、字符串等)的任意组合。
以此为例,假设您创建了一个numpy
这样的数组:
arr = np.array([[0, 1], [2, 3], [4, 5]])
arr
在这里,在实例化“返回 (3,2)”之后立即知道的形状arr.shape
,因此您可以轻松地仅使用逗号分隔的方括号来索引数组。另一方面,以列表为例:
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)
在这种情况下,您不能numpy
使用 [0, 0] 对数组进行索引。相反,您必须使用两个方括号,就像列表列表一样
您还可以查看ndarray的文档以获取更多信息。
推荐阅读
- typescript - 为什么没有检测到 tsc 路径(Windows)?'tsc' 未被识别为内部或外部命令
- python - 更改行值,直到特定行出现在数据框中
- geoserver - 如何通过 geoserver REST API 创建 tiff 图层?
- kubernetes - 仅允许 GKE 私有集群的辅助 IP 范围通过 CloudNAT 访问互联网
- python - 由于 GEKKO 中的用户定义函数导致“没有等式 (=) 或不等式 (>,<) 的方程”错误
- node.js - 将文件从 S3 触发器 lambda 上传到 API 端点时出错
- mysql - 查询运行快但过程慢
- javascript - 在页面上单击随机 div 显示并使用 jquery 隐藏
- reactjs - 为什么我的环境变量在反应中不起作用
- angular - 尽管存在规范文件,业力在 Angular 项目中显示“不完整:未找到规范”