Generating all ordered samples with replacement
显示 更早的评论
Hello everybody,
is there a function in Matlab which generates an array containing all ordered samples of length k taken from a set of n elements
, that is all the k-tuples
where each
can be any of the
, and whose total number is
?
, that is all the k-tuples
where each
can be any of the
, and whose total number is Or can anybody suggest a simple code to generate all of them? I am guessing it involves the iterative use of datasample function checking that every new generated sample is different from the previous ones, but I couldn't find so far a satisfactory way to write it
采纳的回答
更多回答(2 个)
For
and
,
n = 20;
k = 5;
result = dec2base(0:n^k-1, n); %generate all n^k samples with replacement, as char vector 0-9 + A-Z
result = result - '0' + 1; %convert character to numbers 1-10, A-Z get converted to 18+
result(result>17) = result(result>17) - 7 %convert 18+ to 11+
For greater n you'll have to use Jan's answer.
Riccardo
2019-5-8
3 个评论
No, that's going to be extremely slower than both solutions proposed. You're going to be wasting time generating many permutations that were already generated. Both solutions proposed just enumerate all the combinations, with no guessing.
With your solution, when there's only one row left to generate, the probability that it is returned by datasample will be
, extremely small. It's going to take a long time before that last row is generated.
Riccardo
2019-5-8
Jan
2019-5-8
Yes, it is formally correct.
类别
在 帮助中心 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!