如何将两个二进制矩阵相乘(输入多个数字)?

问题描述 投票:0回答:0

我有两个带有长条目(不仅仅是 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()
时,它们都返回一个字符串。我也知道第二次尝试添加了一个异或,这是计划在第一次尝试后添加的。 任何帮助将不胜感激。

python numpy matrix matrix-multiplication
© www.soinside.com 2019 - 2024. All rights reserved.