【问题标题】:NumPy boolean array warning?NumPy 布尔数组警告?
【发布时间】:2016-12-08 14:28:03
【问题描述】:

我有一些 numpy 数组,比如说 abc,并创建了一个 mask 以应用于所有数组。

我正试图这样掩盖它们:

a = a[mask]

其中mask 是一个bool 数组。值得注意的是,我已经验证了

len(a) = len(b) = len(c) = len(mask)

我收到了一个听起来相当神秘的警告:

FutureWarning: in the future, boolean array-likes will be handled as a boolean array index

【问题讨论】:

  • 该错误表明您正在尝试使用 0 维布尔数组作为索引。该操作的语义正在发生变化。您如何验证 mask 甚至是带有 len 的东西?
  • 等等,不,错误的警告。您是否以某种方式获得了mask 的列表?

标签: python arrays numpy boolean bitmask


【解决方案1】:

False == 0,True == 1。如果你的掩码是一个列表,而不是一个 ndarray,你会得到一些意想不到的行为:

>>> a = np.array([1,2,3])
>>> mask_list = [True, False, True]
>>> a[mask_list]
__main__:1: FutureWarning: in the future, boolean array-likes will be handled as a boolean array index
array([2, 1, 2])

这个数组由a[1]、a[0]和a[1]组成,就像

>>> a[np.array([1,0,1])]
array([2, 1, 2])

另一方面:

>>> mask_array = np.array(mask_list)
>>> mask_array
array([ True, False,  True], dtype=bool)
>>> a[mask_array]
array([1, 3])

警告告诉您,a[mask_list] 最终会为您提供与 a[mask_array] 相同的信息(这可能是您最初希望它为您提供的信息。)

【讨论】:

  • 啊,非常感谢,有道理。通过mask = np.array(mask_expression, dtype = bool) 将列表转换为 numpy 数组来修复
猜你喜欢
  • 2016-03-11
  • 2020-10-23
  • 2013-08-07
  • 2017-09-24
  • 2020-06-07
  • 2018-08-10
  • 2018-11-06
  • 2021-01-06
  • 2020-03-25
相关资源
最近更新 更多