【发布时间】:2022-01-10 21:56:42
【问题描述】:
有没有一种有效的方法来计算 Python 中数组每列中的位总和?
示例(Python 3.7 和 Numpy 1.20.1):
- 创建值为 0 或 1 的 numpy 数组
import numpy as np
array = np.array(
[
[1, 0, 1],
[1, 1, 1],
[0, 0, 1],
]
)
- 按 np.packbits 压缩大小
pack_array = np.packbits(array, axis=1)
- 预期结果:没有 np.unpackbits 的每个位置(列)的位总和与
array.sum(axis=0)相同:
array([2, 1, 3])
我发现解决方案很慢:
dim = array.shape[1]
candidates = np.zeros((dim, dim)).astype(int)
np.fill_diagonal(candidates, 1)
pack_candidates = np.packbits(candidates, axis=1)
np.apply_along_axis(lambda c:np.sum((np.bitwise_and(pack_array, c) == c).all(axis=1)), 1, pack_candidates)
【问题讨论】:
-
apply_along_axis不是性能工具。 -
用例是什么?为什么不想使用
unpackbits? -
请注意,您可以使用
np.eye(dim, dtype=int)以更简单的方式构建候选人
标签: python numpy bitwise-operators binary-operators