如何在其他矩阵中捕获立即数更大的指数?

Mis*_*sha 0 matlab binning

考虑一下

a=rand(5,1)
b=rand(5,1);
bs=sum(b);
B=b./bs;
cB=cumsum(B)

%OUTPUT

a =

0.7803
0.3897
0.2417
0.4039
0.0965


cB =

0.0495
0.4030
0.7617
0.9776
1.0000
Run Code Online (Sandbox Code Playgroud)

现在我希望cB中的数字位置立即大于a中的数字.也就是说我想要对应于a中每个数字的5个位置.所以我的输出应该是

P= [4;2;2;3;2]
Run Code Online (Sandbox Code Playgroud)

请帮忙.

小智 5

其他人的建议是体面的,但都错过了重点,因为它们对于大问题效率低下.这是histc最好的工作.(我承认histc显然不是解决这个问题的工具.我希望他们选择一些更明显的名称,因为很少有人知道它.histc用于直方图,但也用于样条的评估.)

对于你的测试用例......

a = [0.7803 0.3897 0.2417 0.4039 0.0965];
cB = [0.0495 0.4030 0.7617 0.9776 1.0000];

[~,b] = histc(a,cB);
b = b + 1
b =
     4     2     2     3     2
Run Code Online (Sandbox Code Playgroud)

Histc返回目标下方元素的索引,因此您需要添加1.

编辑:

Eitan指出IF cB不是单调的,那么就存在问题.但是,在这种情况下,任何解决方案都存在问题,因为解决方案不是唯一的.如果没有提供更多信息,例如您是否需要第一个或最后一个合格的索引,那么对于完全通用的cB,问题没有有效的答案.例如,如果我们有:

cB = [1 3 2 4];
a = 2.5;
Run Code Online (Sandbox Code Playgroud)

有两种可能的解决方案可能会达到,因此索引为2或4.请注意,在过去将histc作为MATLAB中的工具提供之前,我必须为客户提供过去针对此问题的解决方案.例如,在样条代码中,常见的问题是找到一个点落入的结间隔.当然,结必须按排序顺序排列.(我将忽略复制中断的问题.)在样条代码中也存在一种情况,其中bin边缘不是按排序顺序,这是找到样条的反向值的情况,然后不需要单调的.在这种情况下,解决最合适的解决方案可能是合适的.只有客户才能做出决定.

由于cB在示例中生成严格单调,我只能假设单调性是这个问题的假设的一部分.