我有一个概率向量,例如,P = [0.1,0.2,0.3,0.4]。然后我使用命令cumsum创建另一个向量Q = cumsum(P)= [0.1,0.3,0.6,1.0] 我生成一个Uniform [0,1]随机向量,X = [0.11,0.72,0.32,0.94],我想知道X的每个条目是否位于[0,0.1]或[0.1,0.3]之间或[ 0.3,0.6],或[0.6,1.0]我希望返回一个向量,其中包含X的每个条目所属的区间索引。
有没有一种快速的方法可以做到这一点,而无需编写for循环?
答案 0 :(得分:0)
x
和矢量Q
假设你想要在每个区间的上端点中保持相等(通常在概率上),它就像
一样简单ind = find(x<=Q, 1);
对于下端点的相等性,
ind = find(x<Q, 1);
x
和矩阵Q
在这种情况下,您可以使用max
的第二个输出,它作为一种矢量化find
:
x = [.5; .3; .2];
Q = [.1 .3 .5 .7 1;
.2 .3 .4 .8 1
.1 .1 .3 .6 1]
[~, ind] = max(bsxfun(@le, x(:), Q), [], 2)
这给出了
ind =
3
2
3