矩阵乘法

时间:2019-10-22 00:32:30

标签: python

采用两个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''

0 个答案:

没有答案