我不熟悉 np.packbits,我想使用它来执行巨大的 XOR 运算。
这是我的玩具示例:
import numpy as np
# Example arrays
u_values = np.array([[True, True, True, True, True, True, False, True, True, True],
[True, True, True, True, True, True, True, False, False, True],
[True, True, True, True, False, True, False, True, True, True],
[True, True, True, True, False, True, True, False, False, True],
[True, True, True, True, True, False, False, False, False, True],
[True, True, True, False, False, False, False, False, False, True],
[True, False, False, False, False, False, False, False, False, True],
[True, True, False, True, False, True, False, True, True, True]])
v_values = np.array([[True, True, True, True, True, True, False, True, True, True],
[True, False, True, False, True, True, True, False, False, True],
[True, True, True, True, False, True, False, True, True, True],
[True, False, True, True, False, False, True, False, False, True],
[True, True, False, True, True, False, False, False, False, True],
[True, True, True, False, False, True, False, False, False, True]])
我尝试使用以下代码:
u_values_packed = np.packbits(u_values, axis=1)
v_values_packed = np.packbits(v_values, axis=1)
result_packed = u_values_packed[:, None, :] ^ v_values_packed[None, :, :]
result_packed = result_packed.reshape((-1, result_packed.shape[2]))
result_unpacked = np.unpackbits(result_packed, axis=1)
print(result_unpacked.shape) #(48,16)
我得到了输出形状 (48,16) 而不是 (48,10)。
如何获得所需的结果,以便对每一行 u_values 与 v_values 执行异或,得到总维度为 (48,10)?
这是完整的示例输出:
[[False False False False False False False False False False]
[False True False True False False True True True False]
[False False False False True False False False False False]
[False True False False True True True True True False]
[False False True False False True False True True False]
[False False False True True False False True True False]
[False False False False False False True True True False]
[False True False True False False False False False False]
[False False False False True False True True True False]
[False True False False True True False False False False]
[False False True False False True True False False False]
[False False False True True False True False False False]
[False False False False True False False False False False]
[False True False True True False True True True False]
[False False False False False False False False False False]
[False True False False False True True True True False]
[False False True False True True False True True False]
[False False False True False False False True True False]
[False False False False True False True True True False]
[False True False True True False False False False False]
[False False False False False False True True True False]
[False True False False False True False False False False]
[False False True False True True True False False False]
[False False False True False False True False False False]
[False False False False False True False True True False]
[False True False True False True True False False False]
[False False False False True True False True True False]
[False True False False True False True False False False]
[False False True False False False False False False False]
[False False False True True True False False False False]
[False False False True True True False True True False]
[False True False False True True True False False False]
[False False False True False True False True True False]
[False True False True False False True False False False]
[False False True True True False False False False False]
[False False False False False True False False False False]
[False True True True True True False True True False]
[False False True False True True True False False False]
[False True True True False True False True True False]
[False False True True False False True False False False]
[False True False True True False False False False False]
[False True True False False True False False False False]
[False False True False True False False False False False]
[False True True True True False True True True False]
[False False True False False False False False False False]
[False True True False False True True True True False]
[False False False False True True False True True False]
[False False True True False False False True True False]]
numpy.packbits
用 0 填充 8 位的倍数,如记录。在进行解包时,numpy 无法知道您对这些额外的位不感兴趣。你必须用手把它们扔掉:
result_unpacked = np.unpackbits(result_packed, axis=1)[:, :10]