Как я могу создать большие случайные векторы эффективно, не обращаясь к циклам?

Проблемный оператор:-, я хочу создать 50 экземпляров вектора (1 Размер), который содержит случайные вещественные числа (плавание). Размер массива (1 размер) будет, говорят 30 тысяч. Как я продолжаю двигаться так, чтобы издержки были минимальны, или сложность минимальна?

5
задан Kena 6 July 2010 в 14:51
поделиться

2 ответа

N = 30000; %// length of your vectors
I = 50; %// number of instances
v = rand(I, N); 

В приведенном выше примере вы создадите матрицу, в которой каждая строка является одним вектором. Случайные числа генерируются с равномерным распределением (для распределения по Гауссу используйте randn ).

Если вам нужно создать каждый экземпляр отдельно, используйте цикл:

for i=1:I
    v = rand(1, N);
    %// do something with v
end

Но на вашем месте я бы не стал его использовать (он медленнее и, ИМХО, менее понятен).

ИЗМЕНИТЬ :
Относительно вашего вопроса по ответу Мау:
Нет, вам не нужно его индексировать самостоятельно. Пусть Matlab сделает это за вас.
Например, если вам нужно повторить следующую операцию 50 раз:

 x1 = sigma*y + beta * vect1;
 ...
 x50 = sigma*y + beta * vect50;

предполагая, что y является вектором размером 1x30000, вы можете вычислить его в одной строке:

X = sigma*repmat(y, 50, 1) + beta * rand(50, 30000);

объяснение: каждая строка - это единственный вектор, который вы хотели вычислить:

X(1,:) = x1;
...
X(50,:) = x50;

repmat (y, 50,1) повторяет ваш вектор y 50 раз в первом измерении (строки)

4
ответ дан 14 December 2019 в 04:29
поделиться

Создайте матрицу случайных значений 50x30k

values = rand(50, 30000)

, тогда каждая строка будет случайным вектором с 30k значений

 aVector = values(3,:)  % Row 3, all columns
4
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: