【问题标题】:extract a pair from list in matlab从matlab中的列表中提取一对
【发布时间】:2011-02-20 19:18:34
【问题描述】:

我想问这个: 我有数学:

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);

我有两个问题: 1)我不能从我的列表中随机抽取一对。 2) 我不知道我的 step2D 是否正确。

EDIT-->> 代码继续:

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

【问题讨论】:

  • 你总是很难将 Mathematica 翻译成 Matlab,因为它们有不同的哲学。 Mathematica 鼓励函数式编程; Matlab 改为对数组进行操作。

标签: list matlab extract


【解决方案1】:

我想你想在 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

【讨论】:

  • @Deve:你好,谢谢你的帮助。我明天会看看第一个解决方案是否可以告诉你。(我现在无法测试)。至于第二个我的意思是它需要“step ,step..”n 次,其中 step 是列表中的一对。
  • @Deve:你好,你给我的代码只从列表中提取一个数字。例如,它只提取“-1”而不是“-1 0”。如果你能告诉我怎么做我可以用函数句柄来做吗,就像我上面写的那样?谢谢..
  • 你说得对,我更正了这个例子。希望,这就是你想做的。
  • @Deve:首先,非常感谢。这正是我想要的!我还(以同样的方式)创建了一个函数“step”,因为我有 2 个(step & steps2D ). 一切都好!另外,如果你能抽出时间,我会很感激你能帮我解决这个问题:stackoverflow.com/questions/5032029/…你。
  • @Deve:对不起,但我在这段代码中的堆栈更进一步。我编辑了我的原始帖子,如果你能帮助我..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-28
  • 1970-01-01
  • 2012-07-16
  • 2014-06-17
  • 1970-01-01
  • 2011-02-13
相关资源
最近更新 更多