用1替换最大数组,否则为0

时间:2018-03-13 12:35:21

标签: matlab matrix max

假设我们有一个A = [3 4 5; 7 1 4]。我希望将其设为[0 0 1; 1 0 0]

我试过这个:maxa = max(A(:)); A(A==maxa) = 1;

这仅将矩阵的最大值替换为1。我需要将每行的最大值替换为一个,将其他值替换为零。

3 个答案:

答案 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