我有两个Nx3矩阵f
和r
,我想得到这个量
(f*r).sum()
例如,有时我需要在计算之前更改r
的某些列的符号
n=5
f=np.random.rand(n,3)
r=np.random.rand(n,3)
# real calculation
r[:, [0,2]]= -r[:, [0,2]]
got=(f*r).sum()
有没有什么小窍门能让这更快?
编辑:
也许是这个
got = (f * rr).sum(axis=0)
print(-got[0].sum() + got[1].sum() - got[2].sum())
2条答案
按热度按时间kr98yfug1#
您可以使用
einsum
函数,该函数允许您使用单个函数调用执行数组的逐元素乘法和求和。这应该会给予与原始计算相同的结果,但对于大型数组可能会更快。注意,
np.array([-1, 1, -1])
项改变r
的第0列和第2列的符号。我建议阅读this answer以获得更多关于
einsum
如何工作的细节。9udxz4iz2#
您可以使用 multiplier list/array,其中
r
数组的每一列都有相应的乘数: