【发布时间】:2019-03-02 12:21:54
【问题描述】:
我正在尝试在 python 中进行矩阵乘法,我发现了以下我想要理解的代码。 (我知道如何手动将矩阵相乘,我想了解以下代码如何执行相同的操作,我的意思是 BA 中的第一个元素(第 1 行第 1 列)是通过执行 (1*1 + 3*3 + 3*3 + 1*1) 等。
from numpy import array
A= array([[ 1, 4, 5 ],[ 3, 2, 9], [ 3,6, 2], [ 1,6, 8]])
B=A.T
BA= array([[ 0, 0, 0 ],[ 0,0, 0], [ 0,0, 0] ])
for i in range(len(B)):
for j in range(len(A[0])):
for k in range(len(A)):
BA[i][j] += B[i][k] * A[k][j]
我知道列表的长度命令会返回该列表中有多少元素。我不确定它在这里是如何工作的,因为 B 是一个矩阵,我假设它返回有多少行。
len(B) 的范围将是 (0,3),对应于第 1,2 和 3 行。 for i in range 将对应于 i=0, i=1, i= 2
下一个令人困惑的事情是 j in range len(A[0]) A 的第一个元素是第一行,因此这里的长度将对应于 A 的第一个元素中有多少个元素。
基本上我对这个例子的范围和 len 等有一个基本的了解,但我想更好地理解 i、j、k 的每个值,因为这些值以及最后一行我真的不明白。
BA[i][j] += B[i][k] * A[k][j]
请尽可能基本地解释,因为我是编程新手,所以在这一点上对我来说没有什么是微不足道的。感谢您抽出时间帮助他人:)
【问题讨论】:
-
是否使用
numpy.array? -
我导入了 scipy、pylab 和 sys。不确定 numpy.array 是什么,如果您想知道返回什么,我可以尝试一下并向您展示输出。
-
您应该避免使用
from module import *语法。您不仅可能会忘记哪个函数或类来自哪个模块,而且还会在您的程序中造成命名混乱和重大问题。 -
array不能是标准库中的array.array(它有另一个构造签名)。有可能是numpy.array,但这只是假设。查看您的代码:您在某处有from numpy import ...吗?如果是这样:编辑您的问题并相应地标记。请花点时间阅读:How to create a Minimal, Complete, and Verifiable example 以获得灵感 -
B=A.T 表示矩阵 B 是矩阵 A 的转置。我很欣赏有关避免导入的建议。但由于我处于如此基本的水平,我认为它会很好,如果它有效,我会很高兴。 numpy 包含在 scipy 中吗?那是对的吗。我听说你也可以使用 numpy 的内置“函数”来执行矩阵乘法,我也对如何做到这一点感兴趣。