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])
Реализация чередующихся продуктов и сумм в Python без накладных расходов на цикл