假设我们有一个A = [3 4 5; 7 1 4]
。我希望将其设为[0 0 1; 1 0 0]
。
我试过这个:maxa = max(A(:)); A(A==maxa) = 1
;
这仅将矩阵的最大值替换为1。我需要将每行的最大值替换为一个,将其他值替换为零。
答案 0 :(得分:1)
这是在Java中实现它的方法
int arr[][] = {{3, 4, 4}, {7, 1, 4}};
int max = 0000;
int preVMax = 0;
for (int i = 0; i < 2; i++) {
max = 0;
for (int j = 0; j < 3; j++) {
//Consider that given number is max , make it 1
if (max == 0) {
preVMax = arr[i][j];
arr[i][j] = 1;
max = 1;
} else if (preVMax == arr[i][j]) {
preVMax = arr[i][j];
arr[i][j] = 1;
} else if(preVMax < arr[i][j]) {
preVMax = arr[i][j];
arr[i][j - 1] = 0;
arr[i][j] = 1;
}else{
arr[i][j] = 0;
}
}
}
for (int i2 = 0; i2 < 2; i2++) {
for (int j = 0; j < 3; j++) {
System.out.println(arr[i2][j]);
}
}
}
答案 1 :(得分:0)
下面的代码解决了这个问题,但是如果我们在一行中最多有两个或多个相同的值,那么其中一个应该是1和其他0.我们如何修改它?
r = [2 7 6; 4 8 2; 9 2 8];
r = r';
[value,index] = max(r(:,:));
for i = 1:size(r)
for j = 1:3
if r(i,j) == value(j)
r(i,j) = 1;
else r(i,j) = 0;
end
end
end
r = r';
答案 2 :(得分:0)
来自max
的MATLAB帮助:
M = max(A,[],dim)
返回维度dim
中的最大元素。 例如,如果A
是矩阵,则max(A,[],2)
是列向量 包含每行的最大值。
因此,如果你有一个矩阵A = [3 4 5; 7 1 4]
,那么
maxa = max(A, [], 2)
返回每列最大值的列向量,即[5; 7]
,然后
A == maxa
将返回一个带1
的逻辑矩阵,其中A的值等于行的最大值,否则为0
。您可以在表达式或赋值中使用此比较的逻辑矩阵输出,例如:
>> ismax = A == max(A, [], 2)
ismax =
2×3 logical array
0 0 1
1 0 0