计算向量中的值小于另一个向量中的每个元素

HCA*_*CAI 4 arrays matlab vector

我有两个向量rd我想知道的次数r<d(i)在那里i=1:length(d).

r=rand(1,1E7);
d=linspace(0,1,10);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有以下内容,但它不是很优雅:

for i=1:length(d)
sum(r<d(i))
end
Run Code Online (Sandbox Code Playgroud)

这是R中的一个例子,但我不确定这对matlab是否有效: 找到一个向量中小于另一个向量中元素的元素数

Lui*_*ndo 6

你可以使用单例扩展bsxfun:比循环更快,更优雅,但也更加内存密集:

result = sum(bsxfun(@lt, r(:), d(:).'), 1);
Run Code Online (Sandbox Code Playgroud)

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

result = sum(r(:)<d(:).', 1);
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用histcounts带有'cumcount'选项的函数:

result = histcounts(r(:), [-inf; d(:); inf], 'Normalization', 'cumcount');
result = result(1:end-1);
Run Code Online (Sandbox Code Playgroud)