2

通过 Numpy 中的逻辑索引获取矩阵网格的帖子类似,但它没有回答我的问题,因为我正在使用一维布尔数组。

我正在尝试在 Octave 中重新创建以下布尔索引功能。

octave-3.2.4:6> a = rand(3,3)
a =

   0.249912   0.934266   0.371962   
   0.505791   0.813354   0.282006 
   0.439417   0.085733   0.886841  
octave-3.2.4:8> a([true false true])
ans =

    0.24991   0.43942

但是,我无法使用 Numpy 在 Python 中创建相同的结果。

>>> import numpy as np
>>> a = np.random.rand(3,3)
array([[ 0.94362993,  0.3553076 ,  0.12761322],
       [ 0.19764288,  0.35325583,  0.17034005],
       [ 0.56812424,  0.48297648,  0.64101657]])
>>> a[[True, False, True]]
array([[ 0.19764288,  0.35325583,  0.17034005],
       [ 0.94362993,  0.3553076 ,  0.12761322],
       [ 0.19764288,  0.35325583,  0.17034005]])
>>> a[np.ix_([True, False, True])]
array([[ 0.94362993,  0.3553076 ,  0.12761322],
      [ 0.56812424,  0.48297648,  0.64101657]])

如何使用 Numpy 在 Python 上重新创建 Octave 的布尔索引?

4

1 回答 1

3

两个问题:

  1. 使用列表[True, False, True]索引与使用布尔数组索引不同array([True,False,True])。该列表将被解释为整数索引[1,0,1]

  2. 您需要指定只需要第一列的结果:

    >>> a = np.arange(9).reshape(3,3)
    >>> a
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    >>> mask = np.array([True,False,True])
    >>> mask.dtype ## verify we have a bool array
    dtype('bool')
    >>> a[mask,0]
    array([0, 6])
    
于 2013-07-22T03:59:34.887 回答