【问题标题】:Vectorizing and assigning structs and fields向量化和分配结构和字段
【发布时间】:2023-03-28 16:05:01
【问题描述】:

我想用结构向量化操作,并花了几个小时搜索,但我找不到解决方案。 我有一个结构如下:

clear all

n= 10;

for i=1:n

    mystruct(i).x    = i;

    mystruct(i).y    = i;

    mystruct(i).z    = 0;

end

我想将所有 x 添加到所有 y 值并将它们分配给 z。

这行得通:

test1 = [mystruct.x] + [mystruct.y];

test2 = arrayfun(@(a)mystruct(a).x+mystruct(a).y,1:n);

但是,分配数组不会:

mystruct.z = [mystruct.x] + [mystruct.y];

mystruct.z = mystruct.x + mystruct.y;

我可以生成一个新结构:

mystruct2  = struct('z',num2cell ([mystruct.x]+[mystruct.y]));

但是下一个操作又不行了:

mystruct.z = mystruct2.z;

我当然可以使用 for 循环:

for i=1:n

    mystruct(i).z  =  mystruct(i).x   + mystruct(i).y;

end

但这不是我想要的,因为这会使我的代码非常讨厌,并且不适用于使用“parfor”的并行操作。 如何执行此操作?

【问题讨论】:

    标签: arrays matlab struct vectorization


    【解决方案1】:

    我相信您想使用 deal 函数,该函数用于将输入分配到输出,并适用于从 MATLAB 7 开始的结构。

    适当使用[方括号],您可以这样使用:

    [mystruct2.z] = deal([mystruct(1:n).x] + [mystruct(1:n).y]);
    

    哪个输出:

    ans =
    
         2     4     6
    

    耶!

    【讨论】:

    • 仅供参考,如果 n 是 mystruct 的长度,则 mystruct(1:n).x 和 mystruct.x 相同。
    猜你喜欢
    • 2014-04-03
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多