逐个矩阵分配MATLAB

Ant*_*nio 1 matlab min assign

我需要在矩阵"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
Run Code Online (Sandbox Code Playgroud)

我想将"M"的值替换为"B(end,:),以便:

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);
Run Code Online (Sandbox Code Playgroud)

我试着"A(I) = B(end,:)""A(I(1,:)) = B(end,:)",但他们不工作!任何想法我怎么能这样做?我真正的矩阵是巨大的(1200x100000),所以无法手工完成!

Hun*_*ang 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 =[  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,:)
Run Code Online (Sandbox Code Playgroud)

输出将是:

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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

输出是:

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
Run Code Online (Sandbox Code Playgroud)