首页 > 解决方案 > 3D 协方差矩阵 - 向量化 python

问题描述

我需要加速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

使用“for循环”,rxx矩阵的维度是[dim2xdim2],我会得到一个3D“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)

标签: pythonpython-3.xfor-loopvectorizationcovariance

解决方案


推荐阅读