2015-05-24 5 views
0
index = [10 100 1000 10000 100000] 

Скажут, я хотел, чтобы сгенерировать 10, 100,...,100000 (соответствующий индекс выше) экспоненциальные случайные величины с параметром 1/10. Я, конечно, сделал это с for петлей и с помощью команды, напримербыстрый способ для генерации х чисел случайных величин

x = exprnd(0.1,100,1) 

Можно также генерировать экспоненциальные случайные величины из равномерных случайных переменных с

x = -10*log(u) 

В этом методе, я сначала создать однородные случайные величины затем вставляют вектор, u, в предыдущее уравнение. Этот метод быстрее с точки зрения времени вычисления.

Как я могу ускорить этот процесс? Могу ли я сделать это с помощью векторизации, то есть без циклов?

+1

Что именно желаемый результат? 5 разных векторов, содержащих количество элементов, указанных в 'index'? – hbaderts

+0

Желательным результатом будет матрица размером 5 x 2, содержащая время, необходимое для генерации каждого из векторов. – jft87

+0

Итак, ваша задача - генерировать векторы или измерять время, необходимое для этого? –

ответ

0

Попробуйте это:

expFun = @(size)exprnd(0.1,size,1); 

index = [10 20 30 40]; 
data = cellfun(expFun,mat2cell(index,ones(size(index,1),1),ones(1,size(index,2))),'UniformOutput',false); 
0

Я бы создал один длинный вектор длиной sum(index), а затем разделил его на различные размеры, которые я хочу.

Это был бы самый быстрый способ.

+0

Это вполне может быть, но я не могу сравнить, как быстро это было для 10 против 10, 100 против 100, ... по отношению к двум различным методам генерации экспоненциальных случайных величин. – jft87

Смежные вопросы