Python 在Numpy/Scipy中切片阵列
我有这样一个数组:Python 在Numpy/Scipy中切片阵列,python,numpy,scipy,Python,Numpy,Scipy,我有这样一个数组: a = array([[1,2,3],[3,4,5],[4,5,6]]) 从这个只有前两列“a”的1x2数组中切出一个最有效的方法是什么 i、 e 这就是你要找的吗 a[:,1:] 二维numpy数组使用a[i,j](而不是a[i][j])进行索引,但是可以对numpy数组和矩阵使用与python中普通矩阵相同的切片表示法(只需将它们放在一个[]): >>>从numpy导入数组 >>>a=数组([[1,2,3],[3,4,5],[4,5,6]] >>>a[:,1:] 数组
a = array([[1,2,3],[3,4,5],[4,5,6]])
从这个只有前两列“a”的1x2数组中切出一个最有效的方法是什么
i、 e
这就是你要找的吗
a[:,1:]
二维numpy数组使用
a[i,j]
(而不是a[i][j]
)进行索引,但是可以对numpy数组和矩阵使用与python中普通矩阵相同的切片表示法(只需将它们放在一个[]
):
>>>从numpy导入数组
>>>a=数组([[1,2,3],[3,4,5],[4,5,6]]
>>>a[:,1:]
数组([[2,3],
[4, 5],
[5, 6]])
引用一下,基本切片语法是i:j:k
,其中i
是起始索引,j
是停止索引,k
是步骤(当k>0
时)
现在,如果未给出i
,则如果k>0
,则默认为0。否则i
对于k<0
(其中n
是数组的长度)默认为n-1
如果未给出j
,则默认为n
(数组长度)
这是一个一维数组
现在,二维数组是另一种野兽。它的切片语法是a[rowrange,columnrange]
因此,如果您需要所有行,但只需要最后两列,就像您的情况一样,您可以:
a[0:3, 1:3]
此处,“[0:3]
”表示从0到3的所有行。“[1:3]
”是指从第1列到第3列的所有列
现在,正如您可能想知道的,即使您只有3列并且编号从1开始,它也必须返回3列,对吗?i、 e:第1栏、第2栏、第3栏
这是这个语法中棘手的部分。第一列实际上是第0列。所以当你说“[1:3]
”时,你实际上是在说给我第1列和第2列。哪两列是您想要的最后两列。(实际上没有第3列。)
现在,如果您不知道矩阵的长度,或者您想要所有的行,那么您可以将该部分留空。
i、 e
列也是如此。i、 如果你想说,除了第一行以外的所有列,你可以写
a[0:1,:]
现在,上面的答案a[:,1://code>是如何工作的,因为当你对列说“[1://code>”时,它意味着给我除了列0之外的所有内容,直到所有列的末尾。i、 e empty的意思是“直到结束”
现在你们必须意识到,逗号两边的任何东西都是我前面提到的一维情况的子集。i、 e如果要使用步长指定行,可以编写
a[::2,1]
在你的情况下,它会回来
array([[2, 3],
[5, 6]])
i、 e.a[::2,1]
解释为:每隔一行给我一行,从最上面的开始,只给我第二列
我花了一些时间才弄明白。因此,将其粘贴到此处,以防万一它对某人有所帮助。您的Q“1x2”中的示例结果如何。。。?它是如何拥有前两列的?我一定是糊涂了…@Alex:看到结果我想他指的是最后两列:)和1x2。。。好。有3个由2个元素组成的数组,可以这样看;)你完全正确,+1这条规则只适用于二维数组吗?@IvanBalashov不,你也可以用它来处理更高的维度。
a[0:1,:]
a[::2,1]
array([[2, 3],
[5, 6]])