关于在python中索引numpy数组的澄清

时间:2015-12-12 05:00:41

标签: python arrays numpy

我是一名高中生,正在查看一些代码,我发现了一些类似

的内容
a = x[:,0:4]

和x是一个二维数组。我知道a [:]引用数组a中的所有对象,因此对于x [:,0:4],它是指x的所有行和索引为0,1,2,3的列,不包括带索引的列4?

只是试图确认这是如何工作的,因为我已经在几种类型的代码中看到了它,并且只是想确定。

2 个答案:

答案 0 :(得分:1)

你是对的。此a = x[:,0:4]选择前四列。

示例:

>>> a = np.arange(25).reshape(5, 5)
>>> a
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24]])

您可以跳过0,因为a[:,:4]a[:,0:4]相同:

>>> a[:,:4]
array([[ 0,  1,  2,  3],
       [ 5,  6,  7,  8],
       [10, 11, 12, 13],
       [15, 16, 17, 18],
       [20, 21, 22, 23]])

您可以随时思考:"第一维第一维,第二维第二维等等。"在2D情况下,第一个维度是行,第二个维度是列。

答案 1 :(得分:0)

是的,这被称为切片表示法,而numpy数组也可以使用Python的切片表示法,所以

>>>x = np.arange(25).reshape(5, 5)
>>>a = x[:, 0:4]
>>>a
array([[ 0,  1,  2,  3],
   [ 5,  6,  7,  8],
   [10, 11, 12, 13],
   [15, 16, 17, 18],
   [20, 21, 22, 23]])

如果您使用切片表示法,x将是a的视图而不是副本,因此如果您更改数组x中的值,则该值也会更改在a

>>>x[1,1] = 1000
>>>a
array([[   0,    1,    2,    3],
       [   5, 1000,    7,    8],
       [  10,   11,   12,   13],
       [  15,   16,   17,   18],
       [  20,   21,   22,   23]])