If a=[1 2 3], b=[10 20 30], how to create c=[10 20 20 30 30 30]?

5 ビュー (過去 30 日間)
Joshua
Joshua 2014 年 7 月 14 日
編集済み: Roger Stafford 2014 年 7 月 14 日
The b matrix i'th element is repeated the number of times the given number in 'a' matrix and placed in matix 'c'. Also if a=[0 1 2], b=[10 20 30] how to get c=[20 30 30]??

採用された回答

Alfonso Nieto-Castanon
Alfonso Nieto-Castanon 2014 年 7 月 14 日
c = cell2mat(arrayfun(@repmat,b,ones(size(a)),a,'uni',0));
  2 件のコメント
Joshua
Joshua 2014 年 7 月 14 日
Thank you :)
Jan
Jan 2014 年 7 月 14 日
Very nice: +1

サインインしてコメントする。

その他の回答 (2 件)

Roger Stafford
Roger Stafford 2014 年 7 月 14 日
編集済み: Roger Stafford 2014 年 7 月 14 日
Another way:
t = accumarray(cumsum([1,a]).',1);
c = b(cumsum(t(1:end-1)));
  2 件のコメント
Jan
Jan 2014 年 7 月 14 日
I assume you mean "t = " instead of "t - "
Roger Stafford
Roger Stafford 2014 年 7 月 14 日
Oops! Yes, thank you Jan.

サインインしてコメントする。


Jan
Jan 2014 年 7 月 14 日
For large array this is efficient: FEX: RunLength
c = RunLength(a, b)

カテゴリ

Help Center および File ExchangeString Parsing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by