【问题标题】:Octave/Matlab: vectorising '==' operator?Octave / Matlab:矢量化'=='运算符?
【发布时间】:2011-07-08 04:40:39
【问题描述】:

我可以使用“==”运算符和“find()”函数在向量“数据”中查找值的位置,即 45:

data = [ 71 65 23 45 34 12 21 34 52 ];
value = 45;

find (data == value)
ans =  4

有没有办法在不使用循环的情况下对多个值执行相同的操作,即我想在一次调用中获得 [ 4 5 7 ]:

values = [ 45 34 21 ];
find (data == values)
error: mx_el_eq: nonconformant arguments (op1 is 1x9, op2 is 1x3)
error: evaluating argument list element number 1
error: evaluating argument list element number 1

【问题讨论】:

    标签: matlab operators find octave vectorization


    【解决方案1】:

    试试ismember函数:

    data = [ 71 65 23 45 34 12 21 34 52 ];
    values = [ 45 34 21 ];
    
    find(ismember(data, values))
    

    给予:

    ans =
    
     4     5     7     8
    

    【讨论】:

    • 事实上,这比我即将提出的方法快得多:find( any( bsxfun( @eq, data, values' ), 1 ) )。使用tic toc 我知道ismember 是我的bsxfun @eq 方法的x5 倍。比尔干得好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多