/ jmat (45x) .
def precalc(jmat):
JM1 = np.zeros((N,N,N))
JM2 = np.zeros((N,N,N))
for i in range(N):
for j in range(N):
for k in range(N):
if k!=i and k!=j:
JM1[i,j,k]=jmat[k,i]+jmat[k,j]
JM2[i,j,k]=jmat[k,i]-jmat[k,j]
return JM1, JM2
def corr_time1(t, JM1, JM2):
return np.prod(np.cos(2*JM1*t),axis=-1)+np.prod(np.cos(2*JM2*t),axis=-1)
JM1, JM2 = precalc(jmat)
result = np.array([np.sum(corr_time1(t,JM1,JM2)) for t in t_output])
. precalc, . , . , j, i, k .
, np.prod , t_output:
def corr_time2(t, JM1, JM2):
return np.prod(np.cos(2*JM1[None,...]*t[:,None,None,None]),axis=-1) +\
np.prod(np.cos(2*JM2[None,...]*t[:,None,None,None]),axis=-1)
result = np.sum(corr_time2(t_output, JM1, JM2),axis=(1,2))
, 20%. , t_output 10 . np.arange(0,100,10). precalc .
precalc 28x
def precalc1(jmat):
ii = np.arange(jmat.shape[0])
JM1 = jmat[:,:,None] + jmat[:,None,:]
JM2 = jmat[:,:,None] - jmat[:,None,:]
JM1[ii,ii,:] = 0
JM2[ii,ii,:] = 0
JM1[ii,:,ii] = 0
JM2[ii,:,ii] = 0
JM1 = JM1.transpose([1,2,0])
JM2 = JM2.transpose([1,2,0])
return JM1, JM2