我对python很新,对于numpy来说真的很新。 我意识到,在numpy中我可以在所有配置中繁殖数组: row *列,列*行,列*列,行*行。
这是什么意思? 我认为这是矩阵乘法,唯一合法的是行*列, 或列*行和结果是零维或二维。 我对这个操作感到困惑。
答案 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矩阵是一个单独的数据结构。它们总是二维的,并且遵守你在线性代数中学到的所有规则。