三维最小均方求解求助:获取矩阵第二维度j的最小均方及索引
解决Matlab中矩阵第二维度的最小均方索引问题
我来帮你搞定这个问题!首先得明确你具体的需求方向,因为你的描述有两种常见的解读场景,我会分别给出对应的解决方案:
情况1:对每个(i,z)组合,找到j维度上最小差异的索引
这种场景下,我们针对每个(i,z)位置,遍历j=1~24,找到使X(i,j,z)与Y(i,j,z)差异最小(均方值最小)的j索引:
clear all; clc; X = randn(4,24,16); Y = randn(4,24,16); % 1. 计算每个位置的平方差(单个元素的均方就是平方差) sq_diff = (X - Y).^2; % 2. 沿着第二维度(j维度)寻找最小值和对应的索引 % min函数的第三个参数2表示对第二维度操作 [min_mse_vals, min_j_indices] = min(sq_diff, [], 2); % 3. 压缩冗余维度,让结果更易读(从(4,1,16)变为(4,16)) min_j_indices = squeeze(min_j_indices); min_mse_vals = squeeze(min_mse_vals); % 查看示例结果:第一个i和第一个z对应的最小j索引 disp(['i=1, z=1对应的最小j索引:', num2str(min_j_indices(1,1))]); disp(['对应的最小均方值:', num2str(min_mse_vals(1,1))]);
情况2:找到整体均方最小的j索引
如果你的需求是计算每个j对应的全局均方误差(即整个X(:,j,:)和Y(:,j,:)的均方),然后找到使这个全局误差最小的j,代码如下:
clear all; clc; X = randn(4,24,16); Y = randn(4,24,16); % 1. 计算所有位置的平方差 sq_diff = (X - Y).^2; % 2. 对每个j,计算所有i和z的均方误差(沿着第1和第3维度求均值) mse_per_j = mean(sq_diff, [1 3]); % 3. 找到最小全局均方对应的j索引 [min_total_mse, min_j] = min(mse_per_j); min_j = min_j(1); % 提取标量索引 disp(['全局均方最小的j索引:', num2str(min_j)]); disp(['对应的全局最小均方值:', num2str(min_total_mse)]);
关键说明
- Matlab的
min函数支持指定操作维度,第三个参数就是维度编号(这里第二维度是j,对应编号2) squeeze函数用于移除维度为1的冗余维度,让结果矩阵更简洁- 如果需要计算向量级别的均方(比如
X(:,j,z)是4维向量),可以用mean((X(:,j,z)-Y(:,j,z)).^2),这种场景下只需调整mean的维度参数即可批量计算
内容的提问来源于stack exchange,提问作者Gze
相关产品推荐
相关产品推荐

