【发布时间】:2017-02-06 07:46:42
【问题描述】:
我正在尝试使用 numpy 将几个掩码(布尔数组)转换为位掩码,虽然理论上可行,但我觉得我做了太多操作。
例如创建我使用的位掩码:
import numpy as np
flags = [
np.array([True, False, False]),
np.array([False, True, False]),
np.array([False, True, False])
]
flag_bits = np.zeros(3, dtype=np.int8)
for idx, flag in enumerate(flags):
flag_bits += flag.astype(np.int8) << idx # equivalent to flag * 2 ** idx
这给了我预期的“位掩码”:
>>> flag_bits
array([1, 6, 0], dtype=int8)
>>> [np.binary_repr(bit, width=7) for bit in flag_bits]
['0000001', '0000110', '0000000']
但是我觉得特别是对int8 的强制转换和flag_bits 数组的添加太复杂了。因此,我想问是否有任何我错过的 NumPy 功能可用于创建这样的“位掩码”数组?
注意:我正在调用一个需要这样一个位掩码的外部函数,否则我会坚持使用布尔数组。
【问题讨论】: