gpt4 book ai didi

python - 为什么 numpy 数组中相同索引选择的输出存在差异

转载 作者:行者123 更新时间:2023-12-02 16:27:32 24 4
gpt4 key购买 nike

假设我有一个看起来像这样的二维 NumPy 数组,我想提取左下角的正方形 (4x4):

arr_2d = [[ 5,10,15],
[20,25,30],
[35,40,45]]

为什么这种方式有区别:

arr_2d[row,col]

这样:

arr_2d[row][col]

我说的是存在差异,因为我在尝试执行此操作时得到了不同的输出:

arr_2d[1:3,1:3] #output was: [[25,30],
[40,45]]

arr_2d[1:3][1:3] #output was: [[35, 40, 45]]

如果我的问题有误,你能告诉我原因吗?

提前致谢!

最佳答案

假设arr_2d被声明为 numpy 数组:

import numpy as np
arr_2d = np.array([[5, 10, 15],
[20, 25, 30],
[35, 40, 45]])

然后,arr_2d[1:3, 1:3]将从每个维度返回具有元素 1 和 2 的子矩阵(注意 Python 从 0 开始索引)。

arr_2d[1:3][1:3]被解释为索引两次:

  • 第一个 arr_2d[1:3]取第 1 行和第 2 行:rows_1_2 = np.array([[20, 25, 30], [35, 40, 45]])

  • 然后,该结果再次被索引为 [1:3] , 所以 rows_1_2[1:3]这将给出 rows_1_2 的第 1 行和第 2 行.由于该数组中不存在第 2 行,因此仅返回第 1 行,因此 [[35, 40, 45]] .请注意,这是一个 1x3 数组。

一般来说,强烈推荐使用'slice indexing' ,因为索引 2 次对于大型数组来说可能会不必要地慢。

请注意,对于标准的 Python 列表,要获得类似的子矩阵,您需要将其写为:

list_2d = ([[5, 10, 15],
[20, 25, 30],
[35, 40, 45]])
[row[1:3] for row in list_2d[1:3]] # result: [[25, 30], [40, 45]]

对于大型列表来说,这既难读又慢得多。但请注意,标准 Python 可以处理不同类型和长度的子列表,而 numpy 需要相同大小和类型的所有子列表。

切片和 broadcasting是什么使带有 numpy 的 Python 非常适合数字操作和计算。

关于python - 为什么 numpy 数组中相同索引选择的输出存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64196852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com