How to create multiple matrices with different sizes without a loop?

Say I have a matrix with M elements. In this case its 3.
A = [1 2 3];
And I want to create M vectors with N random numbers from the interval 0 to each of the element in A.
X = randi([0,A(1)], 1, N)
Y = randi([0,A(2)], 1, N)
Z = randi([0,A(3)], 1, N)
How can I do this without using loops? Is it possible?

 採用された回答

James Tursa
James Tursa 2020 年 10 月 7 日

0 投票

You will either need to use loops, or hide the loops behind a function call (e.g., arrayfun):
result = arrayfun(@(x)randi([0 x],1,N),A,'uni',false);

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2020 年 10 月 7 日
N = 100;
A = [1 2 3];
M = length(A);
XYZcell = num2cell(floor(rand(M, N) .* (A(:)+1)), 2);
[X, Y, Z] = XYZcell{:};
counts = accumarray(Z(:)+1, 1);
bar(0:3, counts)

1 件のコメント

Walter Roberson
Walter Roberson 2020 年 10 月 7 日
Note: this method is very slightly biased against 0 -- but not enough that you would notice.

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

カテゴリ

ヘルプ センター および File ExchangeLoops and Conditional Statements についてさらに検索

質問済み:

Jay
2020 年 10 月 7 日

コメント済み:

2020 年 10 月 7 日

Community Treasure Hunt

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

Start Hunting!

Translated by