2014-02-28 22 views
2

我对Python非常陌生,对于numpy来说真的很新颖。 我意识到,与numpy我可以在所有配置中乘以数组:行*列,列*行,列*列,行*行。numpy:为什么数组乘法是可交换的?

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

+0

numpy操作通常是元素明智的。还请阅读[广播规则](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)以了解不同维度的数组会发生什么。 – Carsten

+0

哦,如果你需要矩阵乘法,可以尝试像'np.matrix(a)* np.matrix(b)'或['np.dot(a,b)'](http://docs.scipy .ORG/DOC/numpy的/参照/生成/ numpy.dot.html)。 – Carsten

回答

2

我认为这是矩阵乘法

除非你使用matrix对象或dot方法/函数,它不是。这是元素乘法,对于不匹配的维度有一些额外的处理,如broadcasting。如果你想矩阵乘法,使用

numpy.dot(A, B) 

您还可以使用matrix对象而不是ndarray S中,但造成的不一致,可恼人的工作。你需要知道什么操作会返回一个矩阵,如果给定一个矩阵并且总是返回一个数组,那么A[x][y]将不起作用,并且还有更多的小问题会让你感到困扰。

2

Numpy数组是N维网格数据,其大部分二元运算都执行元素标量运算。 a * b,收率a[i,j,k] * b[i,j,k]。如果阵列具有不同的形状,numpy会尝试将较小的数组转换成仍然有意义的数据,然后执行元素操作。

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