如何为数组中的元素赋值(MATLAB)

时间:2018-04-13 19:42:57

标签: arrays matlab matrix

如何使用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

1 个答案:

答案 0 :(得分:3)

max返回每列中的索引。因此,您要设置的下标由i = indj = 1:size(A,2)给出,第二列仅为每列编制索引。遗憾的是,B(i,j)在这种情况下无法执行您想要的操作,它会对ij的每个组合编制索引。

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));