如何将整数矩阵转换为矩阵,其对应的元素是python中的bin(整数矩阵中的元素)?

时间:2017-03-19 05:52:35

标签: python-3.x

我知道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]]

3 个答案:

答案 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')