如何使用max
函数将向量中最高元素的值设置为1?例如,让A
为大小为3行2列的矩阵。我想将A(:,1) = [0.9 0.03 0.01]'
设置为B(:,1)= [1 0 0]
。对于A的第二列重复相同的操作。因此,我应该得到B = [1 0 0; 0 1 0]
。所以,我可以获得每列中最大元素的索引。我不知道如何分配和改变价值。这就是我能做的。请帮忙。
A =
0.9000 0.1000
0.0300 0.5800
0.0100 0.0020
>> [ans,ind] = max(A)
ans =
0.9000 0.5800
ind =
1 2
答案 0 :(得分:3)
max
返回每列中的索引。因此,您要设置的下标由i = ind
和j = 1:size(A,2)
给出,第二列仅为每列编制索引。遗憾的是,B(i,j)
在这种情况下无法执行您想要的操作,它会对i
和j
的每个组合编制索引。
sub2ind
将下标转换为线性索引:
lin = sub2ind(size(A), ind, 1:size(A,2))
应返回向量[1,5]
。线性索引沿列运行。 B(lin)
正是您所需要的:
B = zeros(size(A));
B(lin) = 1;
以更多计算为代价,您可以简化上述操作。 对于新版本的MATLAB,可以执行隐式单例扩展:
B = A == max(A);
在这里,我们只为每列找到与该列的最大值匹配的元素,并将其设置为true
(其值为1)。如果您的MATLAB版本不支持隐式单例扩展,您可以使用bsxfun
来完成相同的事情:
B = bsxfun(@eq, A, max(A));