Python求外积的快速方法?

2024-09-29 17:12:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在寻找一种快速计算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)将其相加。但是,这是相当缓慢的,我想知道是否有一个向量化函数可以用来加快速度。在

如果有人有什么建议,我会非常感激的!在


Tags: 方法元素size产品np矩阵random数组
2条回答

在我看来,你需要做的就是改变换位的顺序,用A.T * B代替{}。在

如果这不是你想要的,看看^{},它可以做一些非常强大的伏都教。对于上面的示例,您将执行以下操作:

np.einsum('ij,ik->jk', A, B)

还要考虑np.outer。在

np.array([np.outer(A, B) for i in xrange(n)]).sum(0)

尽管@Jamie提出的np.einsum显然是赢家。在

^{pr2}$

而且,可以肯定的是,他们的结果是相同的:

In [65]: np.testing.assert_allclose(method_outer, method_einsum)

但是,顺便说一句,我没有发现A.T * B或{}广播成功。在

相关问题 更多 >

    热门问题