逗号分隔范围机制在 Python 中是如何工作的?



Code:

import numpy as np
z = np.array([[1,3,5],[2,4,6]])
print(z[0:, :2])

答:

[[1, 3] [2, 4]]

我是一个python初学者,当上述问题出现时,我正在解决一个互动练习。

我无法理解,在这种情况下 z[0:, :2] 是如何工作的?如果可能,请帮助我了解这种情况。

您可以在此处阅读有关 Numpy 切片和索引的信息:

https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

在这种情况下,0:表示"所有行,从(包括(第 0 行开始一直到最后"(您也可以只使用等效的:,这意味着"所有行,从开始一直到结束"(。

:2的意思是"所有列,从开始一直到(但不包括(第 2 列"。

z[0:, :2]一起表示"z中包括所有行和前两列的部分"。列出的第一个维度是行,第二个维度是列。如果您的数组是 3D,则可以包含另一个带有另一个逗号的维度,依此类推。

首先你要求获取所有行(0::相同(:

[[1,3,5],
[2,4,6]]

然后你要求列 0 和 1(:20:2相同,这意味着从 0 到 2 排除(:

[[1,3],
[2,4]]

>z[0:, :2]选择所有(即两行(中的所有元素(0:选择从0开始的行索引范围(和前两列(:2选择列索引0和1(。

column  0 1 2
--------------
row 0 |  1 3 5
row 1 |  2 4 6

这是 numpy 数组的一个功能,在本例中,适用于 2D 数组。

如果z = np.array([l0, l1, l2, l3])其中 l0、l1、l2、l3 是列表,

然后z[1:3,2:5] = [l1[2:5], l2[2:5]]

因此,第一个切片参数适用于外部列表,而第二个参数适用于内部列表。这推广到 3D numpy 数组等。

这是文档: https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

最新更新