如何将矩阵设置0标准化为最小值,将1标准化为最大值?

时间:2016-04-04 01:01:42

标签: matlab

我需要在0和1中转换大小为2 X N的神经网络输出矩阵,其中0表示列的最小值,1表示相反的值。这对于计算混淆矩阵是必要的。

例如,考虑这个矩阵2 X 8:

 2    33     4     5     6     7     8     9
 1    44     5     4     7     5     2     1

我需要得到这个结果:

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

如果没有for循环,如何在MATLAB中执行此操作?提前谢谢。

2 个答案:

答案 0 :(得分:4)

>> d = [ 2    33     4     5     6     7     8     9;
         1    44     5     4     7     5     2     1];

>> bsxfun(@rdivide, bsxfun(@minus, d,  min(d)), max(d) - min(d))

ans =

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

bsxfun函数是将负和除法运算广播到不同维度的矩阵所必需的(min和max每个只有1行)。

其他解决方案如下(仅适用于2行):

>> [d(1,:) > d(2,:); d(1,:) < d(2,:)]

ans =

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

答案 1 :(得分:2)

如果它只是2xN,那么这将起作用:

floor(A./[max(A); max(A)])

一般来说:

 floor(A./repmat(max(A),size(A,1),1))