有没有randi
的替代方法,我需要唯一的整数值。使用randi
,PianoSperimentale
矩阵可以包含重复的整数值。
lover_bound = 10;
upper_bound = 180;
steps = 10;
NumeroCestelli = 8;
livello = [lover_bound:steps:upper_bound];
L = length(livello);
n_c = 500 000
NumeroCestelli = 8
randIdxs = randi([1,L],n_c,NumeroCestelli);
PianoSperimentale = single(livello(randIdxs));
替代方案必须快速并且支持非常大的矩阵。过去我使用的是:
[PianoSperimentale] = combinator(L,NumeroCestelli,'c','r');
for i=1:L
PianoSperimentale(PianoSperimentale==i)=livello(i);
end
但是太慢了,太痛苦了。 (请参阅Combinator)
最佳答案
就在这里:
randsample(10,3)
给出一个从1到10的3个整数的 vector ,无需替换。
如果需要矩阵而不是 vector :
matrix = NaN(8,12);
matrix(:) = randsample(1000,numel(matrix));
给出一个从1到1000的唯一整数的8x12矩阵。
函数
randsample
在统计工具箱中。如果没有它,则可以使用randperm
代替,如@RodyOldenhuis和@Dan所指出的(请参阅@Dan的答案)。