如何从python中的数组(或矩阵)中提取所有列但只提取一列?

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)

  • 想提一下,这不会改变 `a` 矩阵。这正是我所期待的。 (3认同)

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


Pet*_*son 7

看看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)