一个矢量中的计数值小于另一矢量中的每个元素



我有两个向量rd,我想知道r<d(i)的次数,其中i=1:length(d)

r=rand(1,1E7);
d=linspace(0,1,10);

到目前为止,我已经得到了以下内容,但不是很优雅:

for i=1:length(d)
sum(r<d(i))
end

这是R中的一个例子,但我真的不确定这是否适用于matlab:查找一个向量中少于另一个向量中元素的元素数

您可以使用bsxfun的单例扩展:比循环更快、更优雅,但也更占用内存:

result = sum(bsxfun(@lt, r(:), d(:).'), 1);

在最近的Matlab版本中,由于隐式单例扩展,bsxfun可以被删除:

result = sum(r(:)<d(:).', 1);

另一种方法是将histcounts函数与'cumcount'选项一起使用:

result = histcounts(r(:), [-inf; d(:); inf], 'Normalization', 'cumcount');
result = result(1:end-1);

您可以使用bsxfun一次构建一个矩阵,标记向量r的值低于向量d的值,然后对值求和:

flag=bsxfun(@lt,r',d);
result=sum(flag,1);

对于d中的每个元素,计算该元素比r中的元素大多少倍,这相当于您的问题。

r=rand(1,10);
d=linspace(0,1,10);
result = sum(d>r(:))

输出:

result =
0     0     1     2     7     8     8     8     9    10

相关内容

  • 没有找到相关文章

最新更新