numpy 如何从packbits结果中解包bits?

hvvq6cgz  于 2024-01-08  发布在  其他
关注(0)|答案(1)|浏览(196)

我不熟悉np.packbits,我想用它来执行一个巨大的XOR运算。
下面是我的玩具例子:

  1. import numpy as np
  2. # Example arrays
  3. u_values = np.array([[True, True, True, True, True, True, False, True, True, True],
  4. [True, True, True, True, True, True, True, False, False, True],
  5. [True, True, True, True, False, True, False, True, True, True],
  6. [True, True, True, True, False, True, True, False, False, True],
  7. [True, True, True, True, True, False, False, False, False, True],
  8. [True, True, True, False, False, False, False, False, False, True],
  9. [True, False, False, False, False, False, False, False, False, True],
  10. [True, True, False, True, False, True, False, True, True, True]])
  11. v_values = np.array([[True, True, True, True, True, True, False, True, True, True],
  12. [True, False, True, False, True, True, True, False, False, True],
  13. [True, True, True, True, False, True, False, True, True, True],
  14. [True, False, True, True, False, False, True, False, False, True],
  15. [True, True, False, True, True, False, False, False, False, True],
  16. [True, True, True, False, False, True, False, False, False, True]])

字符串
我尝试使用以下代码:

  1. u_values_packed = np.packbits(u_values, axis=1)
  2. v_values_packed = np.packbits(v_values, axis=1)
  3. result_packed = u_values_packed[:, None, :] ^ v_values_packed[None, :, :]
  4. result_packed = result_packed.reshape((-1, result_packed.shape[2]))
  5. result_unpacked = np.unpackbits(result_packed, axis=1)
  6. print(result_unpacked.shape) #(48,16)


我得到的输出形状是(48,16)而不是(48,10)。
我怎样才能得到想要的结果,以便我可以对每行u_values和v_values执行XOR,从而得到总维数(48,10)?
以下是完整的示例输出:

  1. [[False False False False False False False False False False]
  2. [False True False True False False True True True False]
  3. [False False False False True False False False False False]
  4. [False True False False True True True True True False]
  5. [False False True False False True False True True False]
  6. [False False False True True False False True True False]
  7. [False False False False False False True True True False]
  8. [False True False True False False False False False False]
  9. [False False False False True False True True True False]
  10. [False True False False True True False False False False]
  11. [False False True False False True True False False False]
  12. [False False False True True False True False False False]
  13. [False False False False True False False False False False]
  14. [False True False True True False True True True False]
  15. [False False False False False False False False False False]
  16. [False True False False False True True True True False]
  17. [False False True False True True False True True False]
  18. [False False False True False False False True True False]
  19. [False False False False True False True True True False]
  20. [False True False True True False False False False False]
  21. [False False False False False False True True True False]
  22. [False True False False False True False False False False]
  23. [False False True False True True True False False False]
  24. [False False False True False False True False False False]
  25. [False False False False False True False True True False]
  26. [False True False True False True True False False False]
  27. [False False False False True True False True True False]
  28. [False True False False True False True False False False]
  29. [False False True False False False False False False False]
  30. [False False False True True True False False False False]
  31. [False False False True True True False True True False]
  32. [False True False False True True True False False False]
  33. [False False False True False True False True True False]
  34. [False True False True False False True False False False]
  35. [False False True True True False False False False False]
  36. [False False False False False True False False False False]
  37. [False True True True True True False True True False]
  38. [False False True False True True True False False False]
  39. [False True True True False True False True True False]
  40. [False False True True False False True False False False]
  41. [False True False True True False False False False False]
  42. [False True True False False True False False False False]
  43. [False False True False True False False False False False]
  44. [False True True True True False True True True False]
  45. [False False True False False False False False False False]
  46. [False True True False False True True True True False]
  47. [False False False False True True False True True False]
  48. [False False True True False False False True True False]]

omhiaaxx

omhiaaxx1#

numpy.packbits用0填充为8位的倍数,如documented。在解包时,numpy无法知道您对这些额外的位不感兴趣。您必须手动丢弃它们:
result_unpacked = np.unpackbits(result_packed, axis=1)[:, :10]

相关问题