我有一个像这样的数组:
a = array([[1,2,3],[3,4,5],[4,5,6]])
Run Code Online (Sandbox Code Playgroud)
切出1x2阵列的最有效方法是什么,只有前两列"a"?
也就是说,
array([[2,3],[4,5],[5,6]]) in this case.
Run Code Online (Sandbox Code Playgroud)
谢谢.
Mic*_*yan 24
使用a[i,j](not a[i][j])索引二维numpy数组,但你可以使用与numpy数组和矩阵相同的切片表示法,就像python中的普通矩阵一样(只需将它们放在一个单独的中[]):
>>> from numpy import array
>>> a = array([[1,2,3],[3,4,5],[4,5,6]])
>>> a[:,1:]
array([[2, 3],
[4, 5],
[5, 6]])
引用文档,基本切片语法是i:j:k其中i是起始索引,j是停止索引,k是步骤(当 时k > 0)。
现在如果i没有给出,则默认为 0 if k > 0。否则i默认为n - 1for k < 0(其中n是数组的长度)。
如果j未给出,则默认为n(数组长度)。
这是针对一维数组的。
现在二维数组是一个不同的野兽。其切片语法是a[rowrange, columnrange].
因此,如果您想要所有行,但只需要最后两列,就像您的情况一样,您可以:
a[0:3, 1:3]
Run Code Online (Sandbox Code Playgroud)
其中,“ [0:3]”表示从 0 到 3 的所有行。“ [1:3]”表示从第 1 列到第 3 列的所有列。
现在您可能想知道,即使您只有 3 列并且编号从 1 开始,它也必须返回 3 列,对吗?即:第1列、第2列、第3列
这是该语法的棘手部分。第一列实际上是第 0 列。因此,当您说“ [1:3]”时,您实际上是在说给我第 1 列和第 2 列。这是您想要的最后两列。(实际上没有第 3 列。)
现在,如果您不知道矩阵有多长或者您想要所有行,则可以将该部分留空。IE
a[:, 1:3]
Run Code Online (Sandbox Code Playgroud)
列也同样如此。即如果你想说,除了第一行之外的所有列,你会写
a[0:1,:]
Run Code Online (Sandbox Code Playgroud)
现在,上面的答案a[:,1:]是如何工作的,因为当你[1:]对列说“”时,这意味着给我除了第 0 列之外的所有内容,直到所有列的末尾。即空意味着“直到最后”。
现在您必须意识到逗号两侧的任何内容都是我上面首先提到的一维情况的子集。即,如果您想使用步长指定行,您可以编写
a[::2,1]
Run Code Online (Sandbox Code Playgroud)
在你的情况下会返回
array([[2, 3],
[5, 6]])
Run Code Online (Sandbox Code Playgroud)
iea[::2,1]解释为:从最上面开始每隔一行给我,只给我第二列。
这花了我一些时间才弄清楚。因此将其粘贴在这里,以防万一它对某人有帮助。
| 归档时间: |
|
| 查看次数: |
25956 次 |
| 最近记录: |