使用布尔列表索引numpy矩阵中的列(或行)

使用布尔列表索引numpy矩阵中的列(或行),numpy,indexing,Numpy,Indexing,给定一个形状为(m,n)的numpy矩阵a,以及一个长度为n的布尔值列表ind,我想提取a的列,其中布尔列表的对应元素为true 我第一次天真的尝试 Asub = A[:,cols] 给出了非常奇怪的结果,这里没有必要引用 在pv对的回答之后,我尝试了numpy.ix,如下所示: >>> A = numpy.diag([1,2,3]) >>> ind = [True, True, False] >>> A[:,numpy.ix_(ind)]

给定一个形状为
(m,n)
的numpy矩阵
a
,以及一个长度为
n
的布尔值列表
ind
,我想提取
a
的列,其中布尔列表的对应元素为true

我第一次天真的尝试

Asub = A[:,cols]
给出了非常奇怪的结果,这里没有必要引用

在pv对的回答之后,我尝试了
numpy.ix
,如下所示:

>>> A = numpy.diag([1,2,3])
>>> ind = [True, True, False]
>>> A[:,numpy.ix_(ind)]
array([[[1, 0]],

       [[0, 2]],

       [[0, 0]]])
>>> A[:,numpy.ix_(ind)].shape
(3, 1, 2)
现在结果的形状不合适:我想要一个
(3,2)
结果数组。我想我可以将结果压缩到二维,但肯定有更好的方法可以做到这一点?

因为,当obj是布尔类型的数组对象(例如可能从比较运算符返回的对象)时,会出现“如您所需的布尔索引”

依我看,
ind
需要是
bool
类型的
ndarray

In [15]: A = numpy.diag([1,2,3])

In [16]: ind = [True, True, False]

In [17]: A[:,ind]
Out[17]: 
array([[0, 0, 1],
       [2, 2, 0],
       [0, 0, 0]])
这是因为它将布尔值解释为整数,并为您提供列
[1,1,0]

奥托:

正如所示,当obj是布尔类型的数组对象(例如可能从比较运算符返回的对象)时,会出现“如您所需的布尔索引”

依我看,
ind
需要是
bool
类型的
ndarray

In [15]: A = numpy.diag([1,2,3])

In [16]: ind = [True, True, False]

In [17]: A[:,ind]
Out[17]: 
array([[0, 0, 1],
       [2, 2, 0],
       [0, 0, 0]])
这是因为它将布尔值解释为整数,并为您提供列
[1,1,0]

奥托:


ind
转换为数组:

>>> A[:, np.array(ind)]
array([[1, 0],
       [0, 2],
       [0, 0]])

ind
转换为数组:

>>> A[:, np.array(ind)]
array([[1, 0],
       [0, 2],
       [0, 0]])