如何在numpy python中执行以下操作

时间:2020-05-12 15:40:45

标签: python arrays numpy

我已经使用numpy创建了一个数组:

from numpy import *

a=array([[1,2,3,4,2,7,5,3,8],
         [5,6,7,1,3,6,3,2,8]])
  • print(a[1,1:6:2])的输出为[6 1 6]
  • print(a[0:4:1,3])的输出为[4 1]
  • print(a[1:4:1,2:4:2])的输出为[[7]]

但是我不明白给出输出7的最后一个。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

好吧,你的工作有点奇怪... 通常来说,当您使用[a:b:c,d:e:f]进行索引时,通过获取第c行来访问a至b行(不包括)。然后从第d列到e列(不包括),第f列。

因此,在最后一个示例中,您采用索引为1、2、3的行和索引为2的列。 由于您的输入数组只有两行(即索引为0和1),因此它仅向您返回行索引为1(第二行)和列索引为2(第三列)的元素。那是七个。

我实际上感到惊讶,即使您尝试访问不存在的行索引,numpy甚至可以为您提供有效的返回数组。

顺便说一句,按照惯例,将numpy导入为“将numpy导入为np”。从技术上讲,这并不重要,您可以根据需要导入它,但是如果您遵循约定,则其他人可以更好地理解您的代码,并且您可以更轻松地从使用np约定的其他人实现代码。

答案 1 :(得分:0)

让我们看一下索引。首先,您得到1:4:1,这表示“从索引1的位置到索引4的(不包括)位置,以1的步长。将轴形状之外的位置添加到切片操作时,它将添加直到最后一个可能的位置(因为行轴的大小为2)的每个位置都是索引位置1,因此,第一个索引实际上是行1:的跨度,所以这是1行的跨度。

现在第二次索引操作2:4:2的意思是“从索引2的位置到索引4的(不包括)位置,步长为2。由于步长为2,因此跨度为列,仅包含一个列,即第2列。

这两个索引操作在行和列的跨度上运行,但是跨度仅包含一行和一列。一行一列的数组的表示是什么?恰好是[[x]]。在您的情况下,x=7是因为在索引为1的行和列为2的行中,您具有值7

诀窍在于,使用:选择该轴上的跨度(在python中称为切片)。这就是为什么当您要选择索引i并消除其轴时,请选择[i],而当您要保留轴时,请使用[i:i+1]