有没有randi的替代方法,我需要唯一的整数值。使用randiPianoSperimentale矩阵可以包含重复的整数值。

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的答案)。

10-06 04:13