【发布时间】:2015-10-02 13:51:42
【问题描述】:
这是一个优化问题。给定矩阵 E、H、Q、F 和方法 my_func_basic 中的逻辑(参见代码块),填充矩阵 V。任何潜在的方法,例如通过矢量化,来加速计算?谢谢。
import timeit
import numpy as np
n = 20
m = 90
# E: m x n
E = np.random.randn(m,n)
# H, Q: m x m
H = np.random.randn(m,m)
Q = np.random.randn(m,m)
# F: n x n
F = np.random.randn(n,n)
# V: m x m
V = np.zeros(shape=(m,m))
def my_func_basic():
for x in range(n):
for y in range(n):
if x == y:
V[x][y] = np.nan
continue
h = H[x][y]
e = np.array([E[x,:]+h*E[y,:]])
v1 = np.dot(np.dot(e,F),np.transpose(e))[0][0]
v2 = Q[x][x]+h**2*Q[y][y]
V[x][y] = v1/np.sqrt(v2)
print(timeit.timeit(my_func_basic,number=1000),'(sec), too slow...')
【问题讨论】:
-
这可能不会影响您的整体时间安排,但
E[x,:] + h*E[y,:]应该已经是一个数组。您可能只需重塑它以添加额外的尺寸即可逃脱。否则,如果您以数学方式解释您要完成的工作,可能会更容易判断发生了什么。在这方面可能有一些简化可以帮助... -
mgilson,感谢您的建议!
标签: python numpy matrix vectorization operation