python - 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)
解决方案
推荐阅读
- c++ - 为什么 c++ std 累积总是返回 0
- spring - 如何使用 Spring Boot 禁用默认 Spring 安全性?
- compression - 纹理压缩从 4096 到 512 不损失质量
- c++ - E0312, C2664 尝试将矢量对象作为函数参数传递时出错
- r - 从正态分布生成数字
- amazon-web-services - 如何从关闭的 AWS SES 账户中恢复?
- time-complexity - 如何计算算法的时间复杂度 O(n)?
- laravel - Ionic 4 & Laravel API - 在 http 请求上获得空响应
- javascript - 将数据存储到firebase中的多个参考的最有效方法是什么?
- javascript - NativeScript Vue - 材料设计图标未显示