我正在用python做一个3d渲染器,一个非常常见的操作是向量数组乘以矩阵,我知道numpys @运算符和board casting,所以我只做了matrix @ arrayOfVectors
,看起来不错,但是输出错误,我意识到numpy把向量的array
当作矩阵(在这个例子中是4X 8),并且它是相应地将它们相乘。我已经切换到使用X1 M2 N1 X循环,这确实有一些优点,但我明白这要慢得多,并且如果可能的话应该避免。我想找到一种方法来将矩阵应用于向量数组中的每个向量,而且在某些情况下,还会在之后将每个矢量除以它的w
分量,有没有办法像整洁的matrix @ arrayOfVectors
那样做,或者我必须求助于for vector in arrayOfVectors: matrix @ array
。
1条答案
按热度按时间n53p2ov01#
第一维是不同的,所以direct
matmul
不仅不能给予想要的结果,而且会出错,它试图对2个数组进行矩阵乘法运算:您需要的是将
V
的第一维视为“批处理”:型
我们通过将
V
作为3d阵列来实现这一点-请阅读matmul
文档:如有必要,我们可以删除尾随大小1维(
squeeze
)使用
einsum
很容易指定此类尺寸:我可以用ki来得到(2,3)的答案。