【问题标题】:Getting the mean of a row in a matrix subtracted from the a value and put into another matrix从a值中减去矩阵中一行的平均值并放入另一个矩阵
【发布时间】:2013-11-25 00:45:23
【问题描述】:

我试图获取矩阵中一行的平均值,然后从该行中的一个值中减去该平均值,然后将该值放入相应的矩阵中。我已经用几个 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 矩阵,但我一直无法做到正确。任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:
    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
    

    【讨论】:

    • 感谢您的回答,但它没有返回我正在寻找的矩阵。请查看更新后的问题。
    • @user2743 您提供的输入与您在问题中显示的输入相同吗?我非常怀疑它,因为我最后的输出与期望的完全一样。请检查更新答案中的测试。
    • 使用bsxfun 很有趣!
    • @jkshah - 你完全正确。我想我一直盯着这太久了,并没有注意到这一点。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2021-11-04
    • 1970-01-01
    • 2018-06-29
    • 2018-12-02
    • 2022-11-29
    相关资源
    最近更新 更多