我想矢量化以下矢量的创建:
例如 -
设A
为向量[5 3 2 1]
让B为向量[1 2 3 4]
我希望C
成为向量[1 1 1 1 1 2 2 2 3 3 4]
含义 - i
中的每个元素B
在A(i)
中重复C
次。
我还没有找到一种方法来渲染这个创意,任何想法?
提前致谢!
罗南
答案 0 :(得分:3)
方法#1
如果B
没有任何zeros
-
C = nonzeros(bsxfun(@times,bsxfun(@le,[1:max(A)]',A),B))
方法#2
一般案例解决方案 -
mask = bsxfun(@le,[1:max(A)]',A) %//'
B_ext = bsxfun(@times,mask,B)
C = B_ext(mask)
方法#3
基于{p>cumsum
的方法,必须非常高效 -
idx = [1 cumsum(A(1:end-1))+1] %// indices where each new B values start
C = zeros(sum(A),1) %// storage for output
C(idx) = diff([0 B]) %// put those values, but offseted
C = cumsum(C) %// finally get the output