我有这个载体:
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循环来完成此操作,但我想对此操作进行矢量化。
答案 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)。