【问题标题】:Is there a way to vectorize this code piece in matlab / octave?有没有办法在 matlab / octave 中对这段代码进行矢量化?
【发布时间】:2016-10-17 23:14:34
【问题描述】:

有没有办法对这段代码进行矢量化?

for k=1:K
    vec_y(:,k) = y == k;
end

这里,y3000x1 维度的向量,并且具有元素110(表示),因此每个表示具有与其他所有表示相同的计数(即,将有300 1300 的计数2 等)。

我想要做的是重写或只是创建一个新矩阵,该矩阵对于所有出现的相应1-10 具有以下二进制表示:

1 将由 [1;0;0;0;0;0;0;0;0;0] 表示,2 将由 [0;1;0;0;0;0;0;0;0;0] 表示,依此类推。

我想完全矢量化代码而不使用for 循环。

【问题讨论】:

    标签: matlab octave vectorization


    【解决方案1】:

    编辑: @Suever 建议的

    一种可能性:

    % Sample y values
    y = [1;9;5;6;3]
    
    % Resulting matrix
    m = bsxfun(@eq, 1:10, y)
    
    m =
    
         1     0     0     0     0     0     0     0     0     0
         0     0     0     0     0     0     0     0     1     0
         0     0     0     0     1     0     0     0     0     0
         0     0     0     0     0     1     0     0     0     0
         0     0     1     0     0     0     0     0     0     0
    

    【讨论】:

    • 您实际上不需要repmat,因为您使用的是bsxfun。你可以写bsxfun(@eq, 1:10, y)
    • 效果很好。谢谢!不幸的是,我不能投票给你的答案,因为我没有要求的声誉/积分。 :)
    • 如果你有 R2016b,这会通过隐式扩展变成简单的y == (1:10)
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    相关资源
    最近更新 更多