我有两个带有长条目(不仅仅是 0 和 1)的二进制矩阵,例如我的第一个矩阵是:
[['10000111', '11110010', '01001101', '10010111'],
['01101110', '01001100', '10010000', '11101100'],
['01000110', '11100111', '01001010', '11000011'],
['10100110', '10001100', '11011000', '10010101']]
我想将它们相乘,例如乘法是二进制的,即按位与运算符,加法是按位异或运算符。我不介意它是如何完成的,但我尝试了多种使用 numpy 的方法,结果只是一个带有 true/false 的矩阵。我最后一次尝试如下:
def MixColumns(matrix, Mix):
Mix = np.array(MixCol, dtype=bool)
mr = np.empty((Mix.shape[0], matrix.shape[1]), dtype=bool)
for i in range(mr.shape[0]):
for j in range(mr.shape[1]):
mr[i, j] = np.sum(matrix[:, j] & Mix[i, :], dtype=bool)
print(mr)
我的其他尝试如下:
def toBinaryMatrix(matrix):
for i in range(0, 4):
for j in range(0, 4):
temp = bin(int(matrix[i][j], 16))[2:].zfill(8)
matrix[i][j] = temp
return matrix
def MixColumns(matrix):
Mix = toBinaryMatrix(MixCol)
var = "100011011"
C = [["0" for _ in range(4)] for _ in range(4)]
C = toBinaryMatrix(C)
# Perform matrix multiplication
for i in range(len(Mix)):
for j in range(len(matrix[0])):
for k in range(len(matrix)):
C[i][j] = int(C[i][j], base = 2) ^ (int(Mix[i][k], base = 2) & int(matrix[k][j], base = 2) ^ int(var, base = 2))
这给了我错误:
TypeError: int() can't convert non-string with explicit base
但是当我对每个变量单独应用type()
时,它们都返回一个字符串。我也知道第二次尝试添加了一个异或,这是计划在第一次尝试后添加的。
任何帮助将不胜感激。