matlab - 比较两个不等长的向量得到一个逻辑数组

标签 matlab octave vectorization

我需要向量化以下代码:

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 中这可能吗?

最佳答案

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

bsxfun(@eq,b,a')

ans =

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

关于matlab - 比较两个不等长的向量得到一个逻辑数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8100814/

相关文章:

Matlab - 在没有for语句的情况下将向量减去矩阵的每一行

c++ - 检查 __m128i vector 中的水平零点?

Matlab 重复 x 轴进行插值

matlab - 在matlab/octave中通过二维索引访问3维矩阵

matlab - 计算 "sym"变量的数字部分

file - 如何在 Octave 中使用变量文件名将结构保存到文件中?

python - 分析和取消wave文件的常用频率

arrays - 保留每列的 n 个最大值,并在 MATLAB 中将其余值设置为零,无需循环

Matlab,在一张图中绘制两个数据系列

matlab - 为什么我的低通滤波器会放大信号?