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
调用。
如果我有 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
调用。