matlab中向量之间的比较

Comparison between vectors in matlab

如果我有 A=[3 4 5 6] 和 B=[6 5 4] 那么我想将 A 中的每个值与 B 中的所有值进行比较, 如果该值大于 1,则将计数器增加 1,如果该值相等,则将另一个计数器增加 1

如果你想要一个对应于A中每个值的结果的数组,你可以这样做

arrayfun(@(x) sum(x > B), A)

这给出 [0, 0, 1, 2]。如果你想要总金额,你只需将 sum(...) 放在它的周围:

sum(arrayfun(@(x) sum(x > B), A))

这给出 3.

对于等值计数器,您只需将 > 更改为 ==:

arrayfun(@(x) sum(x == B), A)

这给出 [0, 1, 1, 1].

arrayfun 相比的另一种方法是 bsxfun。虽然它需要更多的内存,但我认为它更快。 arrayfun 是一个隐含的 for 循环,在 MATLAB 中使用循环通常比矢量化方法慢。

如果您想要大于号的大小写,请将 gt 函数与 bsxfun 一起使用,因此:

>> A = [3 4 5 6];
>> B = [6 5 4];
>> sum(bsxfun(@gt, A, B.'), 1)

ans =

     0     0     1     2

如果您想累积所有符合条件的值,您可以在此 bsxfun 调用中放置另一个 sum 调用:

>> sum(sum(bsxfun(@gt, A, B.'), 1))

ans =

     3

对于大于等于的情况,使用ge:

>> sum(bsxfun(@ge, A, B.'), 1)

ans =

     0     1     2     3

对于相等的情况,使用eq:

>> sum(bsxfun(@eq, A, B.'), 1)

ans =

     0     1     1     1

同样,如果您想累积所有符合条件的值,请使用上述结果嵌套另一个 sum 调用。