matlab中向量之间的比较

时间:2015-06-07 17:49:17

标签: matlab compare

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

2 个答案:

答案 0 :(得分:2)

如果你想要一个与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]

答案 1 :(得分:0)

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

如果您想累积符合条件的所有值,可以在此sum来电中添加另一个bsxfun来电:

>> 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调用。