我在寻找一种快速计算n个外积和的方法。在
本质上,我从正态分布生成的两个矩阵开始——有n个向量有v元素:
A = np.random.normal(size = (n, v))
B = np.random.normal(size = (n, v))
我想要的是计算出A和B中v大小的每个向量的外积,然后把它们相加。在
注意A * B.T
不起作用-A的大小是nxv,而B的大小是vxn
我能做的最好的就是创建一个循环,在那里构造外部产品,然后在后面进行总结。我是这样想的:
^{pr2}$这将创建一个nxvxv数组(循环在list comprehension中,它随后被转换成一个数组),然后我可以使用np.sum(outers, axis = 0)
将其相加。但是,这是相当缓慢的,我想知道是否有一个向量化函数可以用来加快速度。在
如果有人有什么建议,我会非常感激的!在
在我看来,你需要做的就是改变换位的顺序,用}。在
A.T * B
代替{如果这不是你想要的,看看^{} ,它可以做一些非常强大的伏都教。对于上面的示例,您将执行以下操作:
还要考虑
np.outer
。在尽管@Jamie提出的
^{pr2}$np.einsum
显然是赢家。在而且,可以肯定的是,他们的结果是相同的:
但是,顺便说一句,我没有发现}广播成功。在
A.T * B
或{相关问题 更多 >
编程相关推荐