我知道python中的bin(Z)返回整数Z的二进制等价物,但我无法弄清楚如何将bin应用于python中整数矩阵的每个元素。
input(2x3)
matrix[[1, 1, 2],[3, 5, 8]]
output(2x3) with 8 bits
matrix[[00000001, 00000001, 00000010],[00000011, 00000101, 00001000]]
答案 0 :(得分:0)
使用numpy的binary_repr()
,您可以将给定的整数转换为其二进制表示形式,如名称所示。 width
参数启用给定长度的输出(在本例中为8)。但是,将此应用于矩阵或数组将产生缺少前导零的问题。这可以通过使用二进制表示中的字符串或使用zfill()
演示here来解决。
所以给出可能解决方案的例子:
import numpy as np
data = np.random.randint(0,100,(2,3), dtype=int)
print(data)
n,m = data.shape
data_bin = np.zeros((n, m), dtype=int)
for i in range(n):
for j in range(m):
data_bin[i, j] = np.binary_repr(data[i, j], width=8)
print(data_bin)
data_bin_str = np.zeros((n, m), dtype='|S8')
for i in range(n):
for j in range(m):
data_bin_str[i, j] = str(np.binary_repr(data[i, j], width=8))
print(data_bin_str)
注意,就我所知,binary_repr()
的循环设置没有数组支持(参见here)。
答案 1 :(得分:0)
你应该能够使用列表推导来做到这一点。
对于矩阵中的y,[[bin(x)for x in y]
答案 2 :(得分:0)
对于给定的输入矩阵:input_matrix
matrix([[bin(int(entry))[2:].zfill(8) for entry in row_vector]for row_vector
in array(input_matrix)])
examples.
input_matrix = matrix([[1, 1, 2],[3, 5, 8]])
output = matrix([['00000001', '00000001', '00000010'],
['00000011', '00000101', '00001000']], dtype='|S8')