Проблемный оператор:-, я хочу создать 50 экземпляров вектора (1 Размер), который содержит случайные вещественные числа (плавание). Размер массива (1 размер) будет, говорят 30 тысяч. Как я продолжаю двигаться так, чтобы издержки были минимальны, или сложность минимальна?
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 раз в первом измерении (строки)
Создайте матрицу случайных значений 50x30k
values = rand(50, 30000)
, тогда каждая строка будет случайным вектором с 30k значений
aVector = values(3,:) % Row 3, all columns