【问题标题】:Comparing boolean numpy arrays比较布尔 numpy 数组
【发布时间】:2016-03-11 23:46:19
【问题描述】:

我有两个类似形状的布尔 numpy 数组,例如:

a=[[True,True,False,False]]
b=[[True,False,True,False]]

我怎样才能得到一个数组c,其中1表示只有数组a为真, 2 表示只有数组 b 为真,0 表示两个数组都为假,nan 表示两者都为真。所以在这种情况下,结果应该是 [[nan,1,2,0]]]。

【问题讨论】:

  • 如果两者都是真的呢?
  • 我已经更新了问题:如果两者都为真,则应返回“nan”

标签: arrays if-statement numpy boolean


【解决方案1】:

你可以使用np.select:

In [20]: a = np.array([True,True,False,False])

In [21]: b = np.array([True,False,True,False])

In [23]: np.select([a&~b, b&~a, a&b], [1, 2, np.nan], default=0)
Out[23]: array([ nan,   1.,   2.,   0.])

【讨论】:

    【解决方案2】:

    你可以使用np.where -

    np.where(a*b,np.nan,(2*b + a))
    

    示例运行 -

    In [60]: a
    Out[60]: array([[ True,  True, False, False]], dtype=bool)
    
    In [61]: b
    Out[61]: array([[ True, False,  True, False]], dtype=bool)
    
    In [62]: np.where(a*b,np.nan,(2*b + a))
    Out[62]: array([[ nan,   1.,   2.,   0.]])
    

    【讨论】:

      猜你喜欢
      • 2019-07-08
      • 2016-05-05
      • 2022-01-23
      • 2014-02-24
      • 2015-04-17
      • 2018-12-03
      • 1970-01-01
      • 2014-11-20
      相关资源
      最近更新 更多