【问题标题】:Problem with printing a product matrix using print使用 print 打印产品矩阵的问题
【发布时间】:2020-03-12 11:35:30
【问题描述】:

我有一个矩阵 A 和 B,我想要这两个矩阵的乘积。这是我在 python 中的代码。

import numpy as np

def matrix_multiplication(a: np.ndarray, b: np.ndarray) -> np.ndarray:

    n, m_a = a.shape
    m_b, p = b.shape

    c = np.zeros((n, p))

    if m_a != m_b:
        raise ValueError('Dimensions of the Matrix A and B are not compatable.')
    else:
        for i in range(len(0, a.shape)):
            for j in range(len(0, a.shape[0])):
                for k in range(0, len(b.shape)):
                    c += a[i][j] * b[j][k]

                    print(c)
                    return c

但是当我运行代码时,我得到“进程以退出代码 0 完成”而不是矩阵 C。这里可能有什么问题?

【问题讨论】:

  • len 只接受一个参数,即要获取长度的项目。你想做的事:range(len(a.shape))。 (假设 len(a.shape) 实际上是有效的。)在进入循环之前,您应该尝试打印出您在 for 循环中使用的值。
  • 最后两行的缩进是否与您正在运行的实际 Python 代码相匹配?看起来 print 和 return 语句是在循环的第一次迭代中到达的。
  • 考虑到 n = A 的行,m_a = A 的列,m_b = B 的列,p = B 的行,for 循环在迭代所需值时应该是正确的,但是会不会是c += a[i][j] * b[j][k] 有问题?

标签: python arrays function matrix


【解决方案1】:
import numpy as np

def matrix_multiplication(a: np.ndarray, b: np.ndarray) -> np.ndarray:

    n, m_a = a.shape
    m_b, p = b.shape

    c = np.zeros((n, p))

    if m_a != m_b:
        raise ValueError('Dimensions of the Matrix A and B are not compatable.')

    else:
        for i in range(a.shape[0]):
            for j in range(len(b[0])):
                for k in range(b.shape[0]):
                    c[i][j] += a[i][k] * b[k][j]
    return c


a = np.array([[28,3], [3, 4],[8,9]])
b = np.array([[6, 4,7], [6, 8,9]])

print (matrix_multiplication(a, b))

【讨论】:

  • 它适用于 2x2 矩阵,但对于 3x2 和 2x3 矩阵等其他矩阵,我得到前 2 个正确的行,但第三个始终为 0,0。这是为什么呢?
  • 您的帐户似乎已被版主从堆栈溢出中删除
  • 再试一次
【解决方案2】:

您似乎正在尝试做一个点积,如果是这样,那么有一个内置的 numpy 函数可以为您做到这一点。

import numpy as np

def matrix_multiplication(a: np.ndarray, b: np.ndarray) -> np.ndarray:
    return a.dot(b)

a = np.array([[1, 2], [3, 4]])
b = np.array([[2, 4], [6, 8]])

print (matrix_multiplication(a, b))

甚至更短:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[2, 4], [6, 8]])

print (a.dot(b))

【讨论】:

  • 这是我做的第一件事,但后来我尝试在没有 np.dot 和 np.matrix 的纯 python 中做它,看看我是否能做到。另外我正在下载 Visual Studios,这样我就可以在 Pycharm 上安装 Numpy。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 2022-01-12
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多