【问题标题】:assigning multiple structures to an array of structures in matlab将多个结构分配给matlab中的结构数组
【发布时间】:2014-09-12 09:48:35
【问题描述】:

我有一个函数newPartical 可以随机化一个结构:

function partical = newPartical(b)
   partical.a = rand;
   partical.b = b;
end

我想创建一个结构数组,并且我希望数组中的每个结构都是随机的。我可以在没有 for 循环的情况下执行此操作吗?

【问题讨论】:

  • 您能进一步解释一下吗?举个输入输出的小例子
  • 你打算如何在no-loop 代码中使用newPartical?也许你可以给我们看一个伪代码?

标签: arrays matlab random struct


【解决方案1】:

您可以使用arrayfun 和cellfun 等迭代函数。这些将函数本身作为输入(通过函数句柄)和传递函数的每个输入的值范围。输出是一个数组或元胞数组,其中每个条目是函数的单个结果。

particleHandle = @particle;
c = arrayfun ( particleHandle , 1:100 );

在这种情况下,c is a 1x100 struct array with fields: a b

我获得的示例结果包括:

c(1).a = 0.5496
c(1).b = 1

c(2).a = 0.9575
c(2).b = 2

c(3).a = 0.9649
c(3).b = 3

根据您的操作,这可能会或可能不会显着提高速度。例如,运行这两个操作:

timeStartArrayFun = tic;
c = arrayfun ( particleHandle , 1:1000 );
timeStopArrayFun = toc ( timeStart );

timeStartFor = tic;
for ( ii = 1 : 1000 )
  d ( ii ) = particle ( ii );
end
timeStopFor = toc ( timeStartFor );

结果是timeStartArrayFun == 0.0201 和timeStartFor == 0.2090。你获得了约 10 倍的速度提升......一点也不差。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2017-06-12
    • 2021-12-03
    相关资源
    最近更新 更多