gpt4 book ai didi

python - Numpy 数组切片期间的行与列向量返回

转载 作者:行者123 更新时间:2023-11-28 17:36:55 26 4
gpt4 key购买 nike

我目前正在学习 Python,在执行基本的数组切片命令时偶然发现了一个让我有点困惑的结果。

我使用此命令创建了一个 4x5 矩阵:

>>> a = numpy.arange(20).reshape(4,5)

给出:

[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10,11,12,13,14],
[15,16,17,18,19]]

如果我像这样索引数组:

>>> a[0:3, 2]

我得到一个行向量:

[2, 7, 12]

但是如果我像这样索引数组:

>>> a[0:3, 2:3]

我得到一个列向量:

[[ 2],
[ 7],
[12]]

插入这两个命令时,我预计结果是相同的,但为什么我会得到不同类型的向量?

谢谢!

最佳答案

tl;dr 版本

在 numpy 中,沿数组的维度获取单个索引会将维数减少 1,因此从二维数组获取索引会生成一维数组(第一种情况)。沿一个维度取一个切片保持相同的维数,即使切片的长度为 1,所以取一个二维数组的长度为 1 的切片仍然是一个二维数组(第二种情况)

详细版

问题是第一个结果不是行向量,而是一维数组。当您从维度中获取单个标量索引时,它会将维度数减少 1。因此,从 4D 数组中获取标量索引使其成为 3D 数组,从 3D 数组中获取一个标量索引使其成为 2D 数组,2D 数组为一维数组和一维数组到标量。

这是为了保持一致性。如果从一维数组中取出一个项目成为标量(将维数减少一维),那么通过扩展,更高维的等效操作应该以等效的方式表现。

在第二种情况下,您获取的是切片,而不是标量。当您这样做时,它会保留维数。因此,即使切片为空(或在您的情况下长度为 1),获取二维数组的切片始终是二维数组。这也是为了一致性。如果二维数组的长度为 3 的切片是二维数组,二维数组的长度为 2 的切片是二维数组,那么二维数组的长度为 1 的切片也应该是二维数组。

这也是一个方便的约定,因为它允许您仅用几个字符明确定义是否要降维。

一些语言,如 MATLAB,没有一维数组(或者,技术上,矩阵)的概念,数组可以是 0D(标量)、2D、3D 等,但不是 1D。另一方面,Python 允许真正的一维数组,这可能会让不习惯它的人感到困惑。

关于python - Numpy 数组切片期间的行与列向量返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635501/

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