我试图获取矩阵中行的平均值,然后从该行中的值中减去该值并将该值放入相应的矩阵中。我用一对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矩阵,但我还没有能够做到正确。任何帮助表示赞赏。谢谢!
答案 0 :(得分:4)
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