我有N * 4暗淡的B矩阵。我想根据最后一列值计算矩阵的平均值。最后一列的重复值在1到3的范围内。我想计算最后一列具有相同值的所有行的平均值。 我正在使用这个命令:
l(it:,)=mean(B(i,:))
其中it
在循环中的范围是1到3,i
包含最后一列= 1的行的所有索引。当我运行此代码时,我得到Sub scripted assignment dimension mismatch error
。任何人都可以指出命令中的错误吗?
答案 0 :(得分:1)
你的问题不是最清楚,但我认为我知道你要做什么。
你说i
包含每个值1,2,3的感兴趣行的索引,所以我假设你需要
mean_k = mean(mean((B(i,:)))
每个k = 1,2,3。显然,每次在识别感兴趣的相关行时迭代1,2,3时,您必须重新计算i
。
在矩阵上调用时mean
函数不返回标量,它返回一个行向量,其元素是矩阵每列的平均值。因此,要获得均值,您需要再次对结果调用mean
。
请记住,这还包括您的整体平均值计算中的最终列值(您用于分类)
答案 1 :(得分:1)
考虑以下示例数据:
B = [ 0.4000 0.3000 0.2000 1.0000
0.3000 0.2000 0.1000 2.0000
0.7000 0.8000 0.6000 1.0000
0.3000 0.4000 0.8000 2.0000
0.7000 0.5000 0.5000 3.0000
0.1000 0.3000 0.9000 3.0000
0.6000 0.4000 0.5000 1.0000 ];
两种可能的方法:
result = NaN(3,3);
for k = 1:3
result(k,:) = mean(B(B(:,4)==k,1:3));
end
使用accumarray
:
result = NaN(3,3);
for k = 1:3
result(:,k) = accumarray(B(:,4), B(:,k), [], @mean, NaN);
end
使用示例数据,上述任何一个都给出了
result =
0.5667 0.5000 0.4333
0.3000 0.3000 0.4500
0.4000 0.4000 0.7000