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

如何在MATLAB中将此赋值向量化为结构数组?,matlab,for-loop,structure,vectorization,Matlab,For Loop,Structure,Vectorization,我初始化了一个结构数组,如下所示: [v(1:5).s] = deal( false(1, 3) ); 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 现在,我只想修改它的某些元素。 我可以用fo

我初始化了一个结构数组,如下所示:

[v(1:5).s] = deal( false(1, 3) );
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循环来实现,如下所示:

[v(1:5).s] = deal( false(1, 3) );
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
如何将其矢量化?我能节省时间吗

多谢各位

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

>> l = false(5,3);
>> l( sub2ind([5 3],idv,ids) ) = true;
>> l = mat2cell( l, ones(5,1), 3 );
使用这个单元,我们可以构造结构

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

我想你的结构比你的例子更复杂,否则我看不出使用它的理由。此外,我还不知道有什么更有效的方法可以同时做到这一点和清除。这个循环肯定会很难打败速度和清晰。考虑从这个数组结构转换成一个数组结构。然后您可以在一个数组中处理
s
的所有值,这使您的任务变得很简单。@OlegKomarov我的结构比这个复杂得多。我的问题的目的是加快我的代码的速度。@shoelzer我不知道如何将其转换为数组结构,因为我的实际结构要复杂得多,并且还有我在这里省略的其他字段。你能为循环版本添加一些计时吗?@Shai好的,谢谢。我想在初始化结构数组时这是很好的。如果我必须更新结构数组怎么办?(参见问题编辑)@Alfredcapobianchi我建议您查看
getfield
setfield
命令。