gpt4 book ai didi

arrays - 如何高效地取两个不同结构数组的线性组合?

转载 作者:太空宇宙 更新时间:2023-11-03 19:45:48 27 4
gpt4 key购买 nike

假设我有两个具有匹配字段的结构数组,而且给定字段中两个数组的内容大小相同:

A.field1 = [1,2,3]
A.field2 = 5

B.field1 = [4,5,6]
B.field2 = 9

我想对每个字段中的所有数据进行线性组合。在我们的示例中,这意味着如果 x 和 y 是常量,我想得到一个结构数组 C,这样

C.field1 = x*(A.field1) + y*(B.field1)
C.field2 = x*(A.field2) + y*(B.field2)

我的第一个猜测是使用 command structfun但这似乎只需要一个结构数组作为输入,我需要同时输入 A 和 B。

一种直截了当的方法是提取所有数据并将它们存储在单独的变量中,进行线性组合,然后将它们放回结构数组中。但似乎必须有一种更简单的方法(或者至少是一种输入速度更快的方法,我的数组并不那么小)。

最佳答案

以下假设您有两个结构数组,它们具有任意数量的匹配字段(n - 两个结构相同),它们不是嵌套的(没有 A.field1.field2)

普通循环:

x = 2;
y = 3;
names = fieldnames(A); % returns n x 1 cell array

for n = 1:length(names)
C.(names{n}) = x*A.(names{n}) + y*B.(names{n});
end

输出:

C = 

field1: [14 19 24]
field2: 37

使用 cellfun 的替代方法:

x = 2;
y = 3;
names = fieldnames(A);
A2 = struct2cell(A);
B2 = struct2cell(B);

C2 = cellfun(@(A,B) x*A+3*B, A2,B2,'UniformOutput',0);
C2 = cell2struct(C2,names)

输出:

C2 = 

field1: [14 19 24]
field2: 37

关于arrays - 如何高效地取两个不同结构数组的线性组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23245139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com