извлечь пару из списка в Matlab - PullRequest
0 голосов
/ 20 февраля 2011

я хотел спросить это: У меня в математике:

step := {{0, 1}, {1, 0}, {0, -1}, {-1, 0}} [[RandomInteger[ {1, 4}] ]]

step  --> this takes one list from above (for example {0,1})

steps2D[n_] := Table[step, {n}]

и я сделал:

a=[0,1];b=[1,0];c=[0,-1];d=[-1,0];
list=[a;b;c;d]
step=@ (rand) rand(1,list) -->> i must extract from here randomly one pair..
step

steps2D=@ (n) arrayfun(step,n);

У меня 2 проблемы: 1) Я не могу извлечь из своего списка случайно одну пару. 2) Я не знаю, имею ли я право step2D.

РЕДАКТИРОВАТЬ - >> Код продолжается:

Walk2D[n_] := FoldList[Plus, {0, 0}, steps2D[n]]
Walk2D[10]
LastPoint2D[n_] := Fold[Plus, {0, 0}, steps2D[n]]
LastPoint2D[100]    

Я сделал это:

Walk2D=@ (list,n) cumsum(steps2D(list,n));
Walk2D(list,10)

LastPoint2D = @ (Walk2D) (Walk2D(end));
walk1=Walk2D(list,100);
LastPoint2D(walk1)  -->> This gives me only one number and not a pair as it should

1 Ответ

0 голосов
/ 20 февраля 2011

Полагаю, вы хотите сделать первый пример кода в Matlab. Для получения случайного элемента из массива list вы можете сделать что-то вроде:

rand_row_index = ceil( length(list) * rand(1) );
step = list( rand_row_index, : );

Что касается вашего второго вопроса, я не совсем уверен, что вы на самом деле хотите сделать, так как я не знаком с Mathematica. Если вы хотите составить матрицу, состоящую из элементов, случайным образом взятых из list, вы можете написать функцию типа

% Create a matrix with n rows that contains random values taken from list.
function result = steps2D(list, n)

    result = zeros(n, size(list, 2));

    for i = 1:n
        rand_row_index = ceil( length(list) * rand(1) );
        step = list( rand_row_index, : );
        result(i, :) = step;
    end

end

И используйте это так:

steps = steps2D( list, 30 );

Обратите внимание, что в Matlab функция steps2D() должна быть определена в отдельном файле с условным названием steps2D.m.

...