我是刚接触python的人,我需要您的帮助。
我有三个矩阵,特别是:
其中:n= 10000,C= 1000,T= 20。
我想计算一下,这个分数:

我尝试使用两个for循环,一个用于i-index,另一个用于c。此外,我使用一个dot乘积来得到方程中的最后一次和。但是我的实现需要太多的时间才能给出结果。
这就是我所实施的:
score = 0.0
for i in range(N):
for c in range(C):
Mic = M[i,c]
score += np.outer(Mic,(np.dot(L[:,i],G[c,:])))有办法避免两个for循环吗?
提前谢谢你!
最好的
发布于 2021-03-03 23:03:12
试试这个score = np.einsum("ic,ti,ct->", M, L, G)
EDIT1
顺便说一下,在您的例子中,score = np.sum(np.diag(M @ G @ L)) (在PYTHON3中,从版本3.5开始,您可以使用@操作符用于matmul函数的语义)比einsum更快(特别是在np.trace((L @ M) @ G )中,由于内存的高效使用,@hpaulj在他的注释中可能表示了这一点)。但是,对于复杂的张量产品,einsum更容易使用(使用einsum编码,我直接使用了数学表达式,而不考虑优化)。
通常,将for与numpy结合使用会导致计算速度急剧减慢(在numpy的情况下,请考虑“矢量化计算”)。
https://stackoverflow.com/questions/66465715
复制相似问题