求助:将Numpy数组运算语句转换为等效Matlab代码
Python转Matlab:特征值/特征向量维度处理等效代码
原Python代码逻辑拆解
先明确这段Python代码的核心操作:
- 对一维数组
eigenvalues取平方根 - 用
[newaxis,:]将其扩展为1行k列的二维数组(实现广播匹配) - 与
eigenvectors执行逐元素乘法(Python自动广播扩展维度) - 对结果转置得到最终的
basis矩阵
Matlab等效代码
方式1:利用Matlab广播(R2016b及以后版本推荐)
假设eigenvalues是从协方差矩阵特征分解得到的列向量(Matlabeig默认返回对角矩阵,需先提取为向量):
% 若eigenvalues是对角矩阵,先提取为列向量 eigenvalues = diag(eigenvalues); % 等效Python代码的核心转换 basis = (sqrt(eigenvalues).' .* eigenvectors).';
如果eigenvalues已经是行向量,可简化为:
basis = (sqrt(eigenvalues) .* eigenvectors).';
方式2:手动扩展维度(兼容旧版Matlab)
如果你的Matlab版本不支持自动广播,用repmat手动复制行向量:
eigenvalues = diag(eigenvalues); sqrt_eig_row = sqrt(eigenvalues).'; % 将行向量复制成与eigenvectors行数一致的矩阵 sqrt_eig_rep = repmat(sqrt_eig_row, size(eigenvectors, 1), 1); basis = (sqrt_eig_rep .* eigenvectors).';
对应关系说明
sqrt(eigenvalues).'→ 对应Python的sqrt(eigenvalues)[newaxis,:]:将一维特征值开平方后转为行向量,实现维度扩展.*→ 对应Python的*:均为逐元素乘法,Matlab广播与Python行为一致.'→ 对应Python的transpose():非共轭转置,对实数矩阵完全等价
内容的提问来源于stack exchange,提问作者user14506090
相关产品推荐
相关产品推荐

