一对一矩阵赋值 MATLAB

one-by-one matrix assignment MATLAB

我需要在矩阵 "A" 的每一列中找到最小值,然后将这些最小值替换为矩阵 "B" 最后一行(具有相同列数)中的值.就像我有这些:

>> A = randi(10,10,5)
A =
       3     5     9     5     8
       7     6     4    10     2
       8     4     1     7     4
       4     7     2     8     2
       7     5     8     7     5
       3     7    10    10     1
       5     7     8     5     7
       8     3     8     2     3
       6    10     2     1    10
       3     7     6     7     2
>> B = randi(100,3,5)
B =
      10    34    66    18    62
      99    95    49    54    81
      52     1    52     9    95
>> [M,I] = min(A)
    M =
         3     3     1     1     1
    I =
         1     8     3     9     6

我想用“B(end,:) 替换 "M" 的值,这样:

A(1,1) = B(end,1);
A(8,2) = B(end,2);
A(3,3) = B(end,3);
A(9,4) = B(end,4);
A(6,5) = B(end,5);

我尝试了 "A(I) = B(end,:)""A(I(1,:)) = B(end,:)" 但它们不起作用!任何想法我怎么能做到这一点?我的真实矩阵很大 (1200x100000),所以无法手动完成!

试试这个来替换第一个最小值:

A = [  3     5     9     5     8;
       7     6     4    10     2;
       8     4     1     7     4;
       4     7     2     8     2;
       7     5     8     7     5;
       3     7    10    10     1;
       5     7     8     5     7;
       8     3     8     2     3;
       6    10     2     1    10;
       3     7     6     7     2];
B =[  10    34    66    18    62;
      99    95    49    54    81;
      52     1    52     9    95];

[M,I] = min(A)
A(sub2ind(size(A),I,1:size(A,2)))=B(end,:)

输出将是:

A =

    52     5     9     5     8
     7     6     4    10     2
     8     4    52     7     4
     4     7     2     8     2
     7     5     8     7     5
     3     7    10    10    95
     5     7     8     5     7
     8     1     8     2     3
     6    10     2     9    10
     3     7     6     7     2

但是,当您必须替换所有最小值时,请改用下面的代码

A = [  3     5     9     5     8;
       7     6     4    10     2;
       8     4     1     7     4;
       4     7     2     8     2;
       7     5     8     7     5;
       3     7    10    10     1;
       5     7     8     5     7;
       8     3     8     2     3;
       6    10     2     1    10;
       3     7     6     7     2];
B =[  10    34    66    18    62;
      99    95    49    54    81;
      52     1    52     9    95];

M = min(A);    
for i=1:size(A,2)
  A(find(A(:,i) == M(i)),i)=B(end,i);
end;
A

输出是:

A =

    52     5     9     5     8
     7     6     4    10     2
     8     4    52     7     4
     4     7     2     8     2
     7     5     8     7     5
    52     7    10    10    95
     5     7     8     5     7
     8     1     8     2     3
     6    10     2     9    10
    52     7     6     7     2

您可以通过单个索引访问矩阵,如下所示:

Indeces =
          1  6 11 16 
          2  7 12 17 
          3  8 13 18 
          4  9 14 19 
          5 10 15 20 

因为你得到了每一列的索引,你只需要将它增加列数乘以矩阵的高度。
这应该会产生正确的结果:

A( I + (0 : size(A,2)-1) * size(A,1) ) = B(end,:)