Python中NxM的矩阵乘法

2024-10-01 09:39:09 发布

您现在位置:Python中文网/ 问答频道 /正文

Python中有两个矩阵:形状(4,1)的矩阵A和形状(4,4)的矩阵B。 我使用列表中的数据形成了两个矩阵

valList数据看起来像

00200030
00200030
00200030
00200030
00480051
FFF0004B
FFF0004B

我将每个项目转换为一个32位整数,然后使用数据形成矩阵

for item in valList:
    int(item,32)

B_RC = createMatrix(rows,1,valList)
B = np.array(B_RC)
print B

A_RC = valList[rows:rows + (rows * cols)]
A = np.array(A_RC).reshape( (rows,cols))
print A

def createMatrix(rowCount, colCount, dataList):   
    mat = []
    for i in range (rowCount):
        rowList = []
        for j in range (colCount):
            if dataList[j] not in mat:
                rowList.append(dataList[i])
        mat.append(rowList)

    return mat

我想把这两个矩阵相乘。 我使用了numpy,但以下代码出现以下错误:

>>> C=np.matmul(B,A)

error: ufunc 'matmul' did not contain a loop with signature matching types dtype('S8') dtype('S8') dtype('S8')

我应该使用什么功能


Tags: 数据infornp矩阵rows形状rc
2条回答

Python为这些用例提供了运算符:

A * B  # dot-product
A @ B  # matrix-multiplication

矩阵乘法运算符是右结合的

如果需要这些参数作为函数参数:

import operator
operator.matmul(A, B)

如评论中所讨论的,矩阵AB具有以32为基数的十六进制值,写为str。要执行点积,我们首先需要使用内置函数int(value, base)将这些值转换为整数

在这里,我创建了一个小示例来解释流程应该如何进行:

>>> import numpy as np

>>> A = np.array([[int("FFBCFFA2", 32)],
                  [int("FFBCFFA2", 32)],
                  [int("FFBCFFA2", 32)],
                  [int("FFBCFFA2", 32)]])
>>> A.shape
(4,1)
>>>
>>> B = np.array([[int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32)],
                  [int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32)],
                  [int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32)],
                  [int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32), int("FFBCFFA2", 32)]])
>>> B.shape
(4,4)
>>>
>>> C = np.matmul(A, B)
[[6956274410837382160]
 [6956274410837382160]
 [6956274410837382160]
 [6956274410837382160]]

正如我们所看到的,点积的输出是数字,您可以使用hex()方法将它们转换回十六进制值:

>>> hex(C[0][0])
0x6089a6b8821a1410

编辑

以下是将valList转换为int的正确方法:

valList = list(map(lambda x: int(x,32), valList))

相关问题 更多 >