如何阈值/过滤矢量?

时间:2013-04-21 14:34:44

标签: matlab vector filter

我有一个包含数据列表(X和Y坐标)的向量,我希望将其与100个向量的数组进行比较(每个向量具有相似但不相同的XY坐标),以便找到匹配项。

每个向量的数据大小范围(10到20个之间),这会在匹配不同大小的矩阵时出现问题。

所以为了匹配,我使用了匹配精确数据的匹配特征,这些匹配特征没有用作不同大小的矢量。

所以我做了 (使用pdist将绳索转换为距离)

threshigh = (vector1/100) * 110;
threslow = (vector1/100) * 90;

if (Vector2 <= threshigh)&&(vector2 >= threslow)   
    disp its a match
else
    not a match
end
这是完美的!但是..我不能在向量上使用运算符,因为它们只适用于标量。

我该如何解决这个问题?

它也发生在我身上,即使它有效并且向量中的某些值落在这个范围之间它也不会匹配,除非它们都这样做?我如何才能获得大部分结果?

1 个答案:

答案 0 :(得分:0)

重复问题的链接应解决您的第一个问题。至于你的第二个问题:

  

...即使这样可行并且向量中的某些值落在此范围之间也不会匹配,除非他们都这样做?我如何才能获得大部分结果?

一旦你有了一个逻辑数组(在与指定范围内的元素相对应的位置有1,在其他地方有0),你可以根据自己的喜好操作它。

在当前形式中,仅当所有元素为if(逻辑“1”)时,true语句才会分支。如果您知道测试的表达式可能是向量(即数组),则可以执行以下操作:

  • 使用any命令检查数组中至少有一个元素是true

    if any(...)
        %// Do something...
    end
    
  • 使用all命令检查所有元素是否为true

    if all(...)
        %// Do something...
    end
    

    (在这里使用all是多余的,但确实提高了可读性......)

  • 使用mode检查大部分'1':

    if mode(double(...))
        %// Do something...
    end
    

    mode返回数组中最常见的元素,因此如果它为'1',则if语句将分支。