2

是否有替代方法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

但是太慢太痛苦了。(见组合器

4

2 回答 2

5

就在这里:

randsample(10,3)

给出一个从 1 到 10 的 3 个整数的向量,没有替换.

如果您需要矩阵而不是向量:

matrix = NaN(8,12);
matrix(:) = randsample(1000,numel(matrix));

给出从 1 到 1000 的唯一整数的 8x12 矩阵.

该函数randsample位于统计工具箱中。如果你没有它,你可以使用它randperm,正如@RodyOldenhuis 和@Dan 所指出的那样(参见@Dan 的回答)。

于 2013-11-08T10:55:25.513 回答
1

此外,如果您没有统计工具箱,那么您可以使用randperm

randperm(m, k) + n - 1

这还将为您提供介于和不替换k的随机整数nn+m

于 2013-11-08T10:58:54.997 回答