我需要在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中执行此操作?提前谢谢。
答案 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))