矢量创建的Matlab矢量化

时间:2014-11-09 07:35:28

标签: matlab vector vectorization

我想矢量化以下矢量的创建:

例如 - 设A为向量[5 3 2 1] 让B为向量[1 2 3 4]

我希望C成为向量[1 1 1 1 1 2 2 2 3 3 4]

含义 - i中的每个元素BA(i)中重复C次。

我还没有找到一种方法来渲染这个创意,任何想法?

提前致谢!

罗南

1 个答案:

答案 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