2017-03-19 15 views
0

私はpythonのbin(Z)が整数Zのバイナリを返すのを知っていますが、私が理解できなかったのは、pythonの整数行列のすべての要素にbinを適用する方法です。整数行列を、対応する要素がビン(整数行列の要素)である行列に、どのように変換できますか?

input(2x3) 
matrix[[1, 1, 2],[3, 5, 8]] 

output(2x3) with 8 bits 
matrix[[00000001, 00000001, 00000010],[00000011, 00000101, 00001000]] 
+0

input_matrixこの整数行列の一例を示す必要があります... –

答えて

0

numpyのbinary_repr()を使用すると、名前が示すように、指定された整数を2進表現に変換できます。 widthパラメータは、指定された長さ(この場合は8)の出力を可能にします。しかし、これを行列や配列に適用すると、先行ゼロが見つからないという問題が生じます。これは、バイナリ表現で文字列を使用するか、hereとしてzfill()を使用することによって対応できます。可能な解決策の そう与える例:binary_repr()としてループセットアップは私の知る限りでは何の配列をサポートしていません

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) 

注(hereを参照してください)。

0

あなたはリスト内包表記を使用してそれを行うことができます。与えられた入力行列のため

[行列におけるyのビン(x)はyのxに対する]

+0

それはしません。エラーメッセージ:1つの要素を持つ整数配列のみをインデックスに変換することができます – Nuelsian

+0

これは2Dリストのためのもので、numpy.matrixを使用しています。 'numpy.matrix(matrix.tolist()内のyの[[bin(x)in x in y])' – Ewe

0

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') 
関連する問題