Как обсуждалось в комментариях, матрицы A
и B
имеют шестнадцатеричное значение основания 32, записанное как str
. И чтобы выполнить скалярное произведение, нам нужно сначала преобразовать эти значения в целые числа, используя встроенную функцию int(value, base)
.
Здесь я создал небольшой пример, чтобы объяснить, как процесс должен go :
>>> 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
EDIT
Ниже приведен правильный способ конвертации valList
в int
:
valList = list(map(lambda x: int(x,32), valList))