numpy:为什么数组乘法是可交换的?

时间:2014-02-28 22:22:40

标签: python numpy

我对python很新,对于numpy来说真的很新。 我意识到,在numpy中我可以在所有配置中繁殖数组: row *列,列*行,列*列,行*行。

这是什么意思? 我认为这是矩阵乘法,唯一合法的是行*列, 或列*行和结果是零维或二维。 我对这个操作感到困惑。

2 个答案:

答案 0 :(得分:3)

  

我认为这是矩阵乘法

除非您使用的是matrix个对象或dot方法/函数,否则它不是。它是元素乘法,对于不匹配的维度,有一些称为broadcasting的附加处理。如果您想要矩阵乘法,请使用

numpy.dot(A, B)

你也可以使用matrix个对象而不是ndarray个,但是它们引起的不一致可能会令人讨厌。如果给定矩阵并且总是会返回一个数组,那么你需要知道哪些操作会返回一个矩阵,A[x][y]将不起作用,还有更多的小问题会让你烦恼。

答案 1 :(得分:3)

Numpy数组是N维网格数据,其大多数二进制运算执行元素标量运算。 a * b会产生a[i,j,k] * b[i,j,k]。如果数组具有不同的形状,numpy将尝试将较小的数组broadcast转换为仍然有意义的数组,然后执行元素操作。

Numpy矩阵是一个单独的数据结构。它们总是二维的,并且遵守你在线性代数中学到的所有规则。