应用程序的核心(用Python编写并使用NumPy)我需要旋转4阶张量.实际上,我需要多次旋转很多张量,这是我的瓶颈.我的天真实现(下面)涉及八个嵌套循环似乎相当慢,但我看不到一种方法来利用NumPy的矩阵运算,并希望加快速度.我有一种感觉,我应该使用np.tensordot,但我不知道如何.
在数学上,旋转张量,T的元素"由下式给出:T" IJKL =Σ克IA克JB克KC克LD Ť ABCD与和被过在右手侧上的重复指数.T和Tprime是3*3*3*3个NumPy阵列,旋转矩阵g是3*3 NumPy阵列.我执行缓慢(每次通话约0.04秒)如下.
#!/usr/bin/env python
import numpy as np
def rotT(T, g):
Tprime = np.zeros((3,3,3,3))
for i in range(3):
for j in range(3):
for k in range(3):
for l in range(3):
for ii in range(3):
for jj in range(3):
for kk in range(3):
for ll in range(3):
gg = g[ii,i]*g[jj,j]*g[kk,k]*g[ll,l]
Tprime[i,j,k,l] = Tprime[i,j,k,l] + \
gg*T[ii,jj,kk,ll]
return Tprime
if __name__ == "__main__":
T = …Run Code Online (Sandbox Code Playgroud)