Fer*_*isi 18 python arrays numpy matrix
给定一个numpy 2d数组(或矩阵),我想提取除i-th之外的所有列.
E. g.从
1 2 3 4
2 4 6 8
3 6 9 12
Run Code Online (Sandbox Code Playgroud)
我想要,例如
1 2 3
2 4 6
3 6 9
Run Code Online (Sandbox Code Playgroud)
要么
1 2 4
2 4 8
3 6 12
Run Code Online (Sandbox Code Playgroud)
我找不到这样做的pythonic方法.我现在可以简单地提取给定的列
a[:,n]
Run Code Online (Sandbox Code Playgroud)
要么
a[:,[n,n+1,n+5]]
Run Code Online (Sandbox Code Playgroud)
但是除了一个之外,提取所有这些呢?
Jai*_*ime 26
因为对于一般情况,您无论如何都要返回一个副本,您可能会发现自己使用np.delete以下代码生成更易读的代码:
>>> a = np.arange(12).reshape(3, 4)
>>> np.delete(a, 2, axis=1)
array([[ 0, 1, 3],
[ 4, 5, 7],
[ 8, 9, 11]])
Run Code Online (Sandbox Code Playgroud)
chr*_*isb 22
使用排除最后一个元素的切片.
In [19]: a[:,:-1]
Out[19]:
array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
Run Code Online (Sandbox Code Playgroud)
如果你想要的不是最后一个元素,我只需要构建一个列表来选择.
In [20]: selector = [x for x in range(a.shape[1]) if x != 2]
In [21]: a[:, selector]
Out[21]:
array([[ 1, 2, 4],
[ 2, 4, 8],
[ 3, 6, 12]])
Run Code Online (Sandbox Code Playgroud)
http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html
看看numpy的高级切片
>>> import numpy as np
>>> a = np.array([[1,2,3,4], [2,4,6,8], [3,6,9,12]])
>>> a[:,np.array([True, True, False, True])]
array([[ 1, 2, 4],
[ 2, 4, 8],
[ 3, 6, 12]])
Run Code Online (Sandbox Code Playgroud)