我试图获取矩阵中一行的平均值,然后从该行中的值中减去该平均值,然后将该值放入相应的矩阵中。我已经用几个 for 循环完成了此操作,但我想放弃该代码。我是一位经验丰富的程序员,正在尝试学习如何在不使用 for 循环的情况下在 Matlab 中执行操作。非常感谢任何帮助。
A = [ 1 3 5; mean = 3
2 5 5; mean = 4
3 4 8; ]; mean = 5
B = [|B_11-mean| |B_12-mean| |B_13-mean|
|B_21-mean| |B_22-mean| |B_23-mean|
|B_31-mean| |B_32-mean| |B_33-mean|];
B = [ 2 0 2;
2 1 1;
2 1 3; ];
下面是我正在使用的代码。我计划扩展到更大的数据集,因此我希望使其尽可能高效。
[rows columns] = size(A);
B = zeros(rows, columns);
mean_row = mean(A.');
for j=1:rows
for i=1:columns
B(j,i) = abs(A(j, i) - mean_row(1,columns));abs(A(j, i) - mean_row(1,columns));
end
end
我一直在研究如何在没有 for 循环的情况下做到这一点以及如何更有效地创建 B 矩阵,但我一直没能做到正确。任何帮助表示赞赏。谢谢!
最佳答案
B = abs ( bsxfun (@minus, A, mean(A,2) ) );
测试
>> A = [ 1 3 5; 2 5 5; 3 4 8 ]
A =
1 3 5
2 5 5
3 4 8
>> B = abs ( bsxfun (@minus, A, mean(A,2) ) )
B =
2 0 2
2 1 1
2 1 3
关于matlab - 获取矩阵中行的平均值减去 a 值并将其放入另一个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152831/