八度:比较两个向量

时间:2012-08-26 16:44:58

标签: octave

我有这个载体:

t = 1: 10 % t = 1 2 3 ..10

A= [3 4 5] % a column vector 

如果我输入:

(3 == t)

我得到了结果:

0 0 1 0 0 0 0 0 0 0 % it means: 1 at location equals, and 0 at others

我想对vector a执行此操作,这意味着它将采用向量A中的每个元素并比较并返回另一个向量。所以在这种情况下,结果将是3×10矩阵。

但是这一行会导致错误:A==t

当然,我可以通过使用for循环来完成此操作,但我想对此操作进行矢量化。

2 个答案:

答案 0 :(得分:8)

您正在寻找的是函数ismember

octave> t = 1:10
t =
    1    2    3    4    5    6    7    8    9   10

octave> A = ismember (t, [2 3 4])
A =
   0   1   1   1   0   0   0   0   0   0

答案 1 :(得分:3)

使用octave的广播能力,存在于3.6.3(不确定何时推出),你可以简单地说:

A'==t

如果你想让它产生与carandraug的ismember命令相同的结果,你只需要添加一个“any”,如下所示:

any(A'==t)

对于较小的向量,此方法比ismember方法快得多。

octave:209> tic; for i=1:10000 B=ismember(t,A); end; toc;
Elapsed time is 1.5 seconds.
octave:211> tic; for i=1:10000 B=any(A'==t); end; toc;
Elapsed time is 0.2 seconds.

注意:如果您的八度音阶版本不支持广播,或者您希望它与旧版本保持兼容,则A'== t可以替换为bsxfun(@ eq,A',t)。