如何在MATLAB中将此赋值向量化为结构数组?

时间:2013-09-11 20:25:26

标签: matlab for-loop structure vectorization

我已初始化了一个结构数组:

[v(1:5).s] = deal( false(1, 3) );

现在,我想只修改它的某些元素。 我可以使用for循环来完成它,如下所示:

idv = [2 4 5];                 % v indexes
ids = [1 1 3];                 % corresponding s indexes where to write
for i=1:length(idv)
   v( idv(i) ).s( ids(i) ) = true;
end

有没有办法对此操作进行矢量化?

如果我需要更新现有结构中的矢量怎么办?

假设我有:

for i = 1:NoP
    vm(i).s = false(size(vm(i).v));
end

我该如何对此进行矢量化?我会节省时间吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

简单
首先,我们构造一个具有适当逻辑值的单元数组

>> l = false(5,3);
>> l( sub2ind([5 3],idv,ids) ) = true;
>> l = mat2cell( l, ones(5,1), 3 );

使用这个单元格我们可以构造struct

>> v = struct('s', l)