Это проблема оптимизации. Приведенные матрицы E, H, Q, F и логика в методе my_func_basic (см. Блок кода) заполняют матрицу V. Любые потенциальные способы, например, посредством векторизации, ускорить вычисление? Благодарю.оптимизация операций с матрицами в python, numpy
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 [х ,:] + Н * Е [у,:]' уже должен быть массивом , Возможно, вам удастся просто изменить его, чтобы добавить дополнительное измерение. В противном случае было бы немного легче рассказать, что происходит, если вы математически объясните, что именно вы пытаетесь выполнить. Могут быть некоторые упрощения на той стороне, которые могли бы помочь ... – mgilson
mgilson, спасибо за предложение! – teng