获取矩阵中行的平均值从a值中减去并放入另一个矩阵中

时间:2013-11-22 19:20:03

标签: matlab matrix

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

1 个答案:

答案 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