【问题标题】:Numpy indexing with a one dimensional boolean array使用一维布尔数组的 Numpy 索引
【发布时间】:2013-07-20 17:01:35
【问题描述】:

Getting a grid of a matrix via logical indexing in 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 的布尔索引?

【问题讨论】:

    标签: python arrays python-2.7 numpy octave


    【解决方案1】:

    两个问题:

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

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2023-01-11
      • 1970-01-01
      • 2018-07-06
      • 2018-12-13
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多