将简单的c算法转换为matlab

时间:2017-07-06 20:38:22

标签: matlab

很简单,我想选择一行的最大值,使一行中的所有其他元素等于零,然后将具有最大值的位置转换为1.

这是代码:

float A [3][3];
 A [0][0] = 1.1, A [0][1] = 3.2, A [0][2] = 1.3;
 A [1][0] = 2.1, A [1][1] = 2.2, A [1][2] = 2.3;
 A [2][0] = 3.1, A [2][1] = 3.2, A [2][2] = 3.3;
for (int i=0; i<3; i++) {
  float biggest=-1000000;
  int biggest_position=0;
  for (int y=0; y<3; y++)
     if (A [i][y]>biggest) {
        biggest_position = y;
        biggest = A[i][y];
        cout << "biggest position" << biggest_position << endl;
     }   
  for (int y=0; y<3; y++)
     A [i][y] = 0;
  A [i][biggest_position] = 1;
}    
for (int i=0; i<3; i++) 
   for (int j=0; j<3; j++)
     cout << A [i][j] << endl;

那么我需要做些什么来用matlab语言正确地重写这段代码呢?

3 个答案:

答案 0 :(得分:1)

您可以使用max查找最大值,并创建一个全零元素矩阵并将最大值放在矩阵的第一列中:

  newA = zeros(size(A));
  newA(:,1) = max(A,[],2);

答案 1 :(得分:0)

只是做:

A = A==max(A); %array of zeros with only ones at the maximum  of the columns of the array.

如果您想要最多使用'

进行转置
A = (A'==max(A'))';

答案 2 :(得分:0)

这可能是你想要的

a=[1,2,3;2,3,4;3,2,1;2,4,1]
[~,ap]= max(a,[],2);
atr=zeros(size(a))';
atr((1:size(a,1))*size(a,2)-size(a,2)+ap')=1;
atr'

结果:

a =

 1     2     3
 2     3     4
 3     2     1
 2     4     1

ans =

 0     0     1
 0     0     1
 1     0     0
 0     1     0

使用矩阵似乎是一种更简单的方法,你可以尝试一下