采用两个2D NumPy矩阵作为参数 返回1个2D NumPy数组:两个输入矩阵的乘积 该函数将执行操作Z = X×Y,其中X和Y是函数参数。记住如何执行矩阵矩阵乘法:
首先,您需要确保矩阵尺寸对齐。为了计算X×Y,这意味着X(第一矩阵)的列数应与Y(第二矩阵)的行数匹配。这些被称为“内部维”-矩阵维通常被称为“列行”,因此第一个操作数X的第二维在操作的“内部”;与第二个操作数的第一个维度Y相同。如果操作改为Y×X,则需要确保Y的列数与X的行数匹配。如果这些数字不匹配,您应该返回None。
第二,您需要创建输出矩阵Z。此矩阵的维将是两个操作数的“外部维”:如果我们计算X×Y,则Z的维将具有相同的维。行数为X(第一个矩阵),列数与Y(第二个矩阵)相同。
第三,您需要计算成对的点积。如果运算为X×Y,则这些点积将位于X的第i行与Y的第j列之间。然后,所得的点积将进入Z [i] [j]。因此,首先,您将找到X的第0行与Y的第0列的点积,并将其放在Z [0] [0]中。然后,您将找到X的第0行与Y的第1列的点积,并将其放在Z [0] [1]中。依此类推,直到X和Y的所有行和列都相互进行点积运算。
您可以使用numpy.array,但不能使用与计算矩阵乘积相关的函数(并且绝对不能使用@运算符)。
您可以使用numpy.dot,但只能用于乘以向量,因为它也可以用于乘以完整矩阵。
import numpy as np
def mm_multiply(X, Y):
X = [[1,2], [2,1]]
Y = [[2,3], [3,3]]
X = np.array(X)
Y = np.array(Y)
[I,J] = X.shape
[K,H] = Y.shape
Z = np.zeros((I,H))
for i in range(I):
for j in range(H):
for k in range(K):
Z[i,j] += X[i,k]*Y[k,j]
print(Z)
________________
我的提交代码是mv_multiply,但没有定义,但这是先前的问题-但是使用正确的编码可能会消失。我收到的另一个错误是: 任何帮助都感激不尽!!提前致谢!
TypeError Traceback (most recent call last)
<ipython-input-38-1b8bf5d47d82> in <module>
4 A = np.random.random((48, 683))
5 B = np.random.random((683, 58))
----> 6 np.testing.assert_allclose(mm_multiply(A, B), A @ B)
/opt/conda/lib/python3.7/site-packages/numpy/testing/_private/utils.py in assert_allclose(actual, desired, rtol, atol, equal_nan, err_msg, verbose)
1491 header = 'Not equal to tolerance rtol=%g, atol=%g' % (rtol, atol)
1492 assert_array_compare(compare, actual, desired, err_msg=str(err_msg),
-> 1493 verbose=verbose, header=header, equal_nan=equal_nan)
1494
1495
/opt/conda/lib/python3.7/site-packages/numpy/testing/_private/utils.py in assert_array_compare(comparison, x, y, err_msg, verbose, header, precision, equal_nan, equal_inf)
779 return
780
--> 781 val = comparison(x, y)
782
783 if isinstance(val, bool):
/opt/conda/lib/python3.7/site-packages/numpy/testing/_private/utils.py in compare(x, y)
1486 def compare(x, y):
1487 return np.core.numeric.isclose(x, y, rtol=rtol, atol=atol,
-> 1488 equal_nan=equal_nan)
1489
1490 actual, desired = np.asanyarray(actual), np.asanyarray(desired)
/opt/conda/lib/python3.7/site-packages/numpy/core/numeric.py in isclose(a, b, rtol, atol, equal_nan)
2519 y = array(y, dtype=dt, copy=False, subok=True)
2520
-> 2521 xfin = isfinite(x)
2522 yfin = isfinite(y)
2523 if all(xfin) and all(yfin):
TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''