creating a vector from a bin count

3 次查看(过去 30 天)
Hello,
I have a matrix I got from another source that look like:
[0 5; 1 2; 2 1]
I wish to get a vector like [0 0 0 0 0 1 1 2] .
Thanks
EC

采纳的回答

Stephen23
Stephen23 2019-5-23
编辑:Stephen23 2019-5-23
R2015a or later:
>> M = [0 5; 1 2; 2 1];
>> repelem(M(:,1),M(:,2)).'
ans =
0 0 0 0 0 1 1 2
R2014b or earlier:
>> C = arrayfun(@(x,n)repmat(x,1,n),M(:,1),M(:,2),'uni',0);
>> [C{:}]
ans =
0 0 0 0 0 1 1 2

更多回答(1 个)

Rik
Rik 2019-5-23
You could of course do this with a loop (or cellfun), but I think a more elegant solution is with cumsum instead.
data=[0 5; 1 2; 2 1];
delta=data(:,1)-[0;data(1:(end-1),1)];
change_pos=[0;cumsum(data(1:(end-1),2))]+1;
out=accumarray(change_pos,delta);
out=cumsum(out);
The idea in this code is to do this:
%repeat 0 for 4 entries, 1 for 1 entry, and don't repeat 2
[0 x x x x 1 x 2]
%by setting x to 0, cumsum will create the desired matrix

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by