Мне нужно ускорить код Python, я бы хотел избежать использования следующего для цикла, где матрица «данных» имеет размерность [dim1xdim2]:
for i in range(int(dim1)):
data_process = data[i,:].reshape((dim2, 1))
rxx = data_process * np.matrix.getH(np.asmatrix(data_process)) / dim2
Использование цикла «для»«Размер матрицы rxx равен [dim2xdim2], я бы получил трехмерную матрицу« rxx »[dim1xdim2xdim2]. Я попытался использовать следующее решение:
data_new = repeat(data_process0[:, :, newaxis], dim2, axis=2)
N_2 = data_new.shape[2]
m1 = data_new - data_new.sum(2, keepdims=1) / N_2
y_out = einsum('ijk,ilk->ijl', m1, m1) / (N_2 - 1)
В этом случае я получил 3D матрицу "y_out" [dim1xdim2xdim2], но в моем случае это не работает.
Спасибо
Типичные данные выборки:
from numpy import matrix, random, asmatrix, linalg, empty
B = random.random((156, 48))
A = B.shape
eig_val = empty(A, dtype=complex)
eig_vec = empty((A[0], A[1], A[1]), dtype=complex)
for i in range(int(A[0])):
data_process = B[i, :].reshape((A[1], 1))
rxx = data_process * matrix.getH(asmatrix(data_process)) / A[1]
eig_val[i:, ...], eig_vec[i:, ...] = linalg.eig(rxx)