【问题标题】:Compare two vectors of unequal lengths to get a logical array比较两个长度不等的向量得到一个逻辑数组
【发布时间】:2011-11-11 22:36:15
【问题描述】:

我需要对以下代码进行矢量化处理:

a = [1 2 3 2 3 1];
b = [1 2 3];

for i = 1:length(a)
    for j = 1:length(b)
        r(i, j) = (a(i) == b(j));
    end
end

输出的r应该是一个逻辑数组:

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

我能得到的最接近的是:

for j = 1:length(b)
    r(:, j) = (a == b(j));
end

遍历较短的向量显然更有效,因为它生成的迭代次数更少。正确的解决方案应该没有任何 for 循环。

这在 MATLAB/Octave 中可行吗?

【问题讨论】:

    标签: matlab octave vectorization


    【解决方案1】:

    这是一个使用bsxfun 的简单解决方案。

    bsxfun(@eq,b,a')
    
    ans =
    
         1     0     0
         0     1     0
         0     0     1
         0     1     0
         0     0     1
         1     0     0
    

    【讨论】:

      【解决方案2】:

      bsxfun(@eq, a', b)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        相关资源
        最近更新 更多