很简单,我想选择一行的最大值,使一行中的所有其他元素等于零,然后将具有最大值的位置转换为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语言正确地重写这段代码呢?
答案 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
使用矩阵似乎是一种更简单的方法,你可以尝试一下