gpt4 book ai didi

MATLAB:嵌套函数和结构

转载 作者:行者123 更新时间:2023-12-02 04:54:48 25 4
gpt4 key购买 nike

总结:我想调用一个返回多个结构 n 次的函数。如何将结果附加到我的输出结构中的现有字段(即创建向量),而不是在每次迭代时创建包含标量的新字段?


示例:考虑一个函数 sample_fct( x ) 1) 在 x 上执行一些操作并将结果保存在几个新的变量(示例代码中的 ab)然后 2) 调用一些子函数 calculate_one( x )calculate_two( x )ab 作为输入。这些功能究竟做什么并不重要。然后将这些函数的输出收集到结构 AB 中。

function [A, B] = sample_fct( x )
a = 1 * x;
b = 2 * x;
[A.one, A.two] = call_functions( a );
[B.one, B.two] = call_functions( b );
function [one, two] = call_functions( input )
one = calculate_one( input );
two = calculate_two( input );
function one = calculate_one( input )
one = input.^2;
end
function two = calculate_two( input )
two = input.^3;
end
end
end

然后我想在我的脚本中使用不同的输入参数调用此函数 n

n = 3;
for i = 1:n
[A(i), B(i)] = sample_fct( i );
end

当我这样做时,AB 变成 1*n 结构,每个字段再次包含字段 onetwo 。因此,在我的 n = 3 示例中,我有 3 个标量实例 onetwo。我的示例代码的输出如下所示:

>> A
A =
1x3 struct array with fields:
one
two
>> A.one
ans =
1
ans =
4
ans =
9

我真正想要的是 AB 是具有 1*n 个向量的 1*2 结构 onetwo,因此所需的输出应如下所示:

>> A
A =
two: [1 8 27]
one: [1 4 9]

如果 [one, two] 不是我的函数的输出变量并且没有分别为 A 和 B 调用我的函数,我究竟该如何做到这一点?


我为什么要这样做:我想在一个时间序列上运行一个具有不同参数组合的预测模型,并计算 1 分钟、1 小时的一些拟合优度度量和其他统计数据、1天等交涉。在我的示例中,x 将是时间序列,n 上的循环是不同参数向量 ab< 上的循环 表示具有不同的采样时间以及一个和 two 我想在结构 AB 中收集的一些统计信息。我很确定有一种更复杂的方法可以做到这一点,但我就是无法理解它。

我知道使用向量/矩阵而不是结构很容易做到这一点,但我希望能够使用变量名而不是 A.hourly(:,19) 或类似的名称来调用我的输出,因为我在我的实际代码中计算许多统计数据,而不仅仅是两个。

最佳答案

编辑: 根据评论中提到的错误进行了更新。

您可以通过以下方式转换它们

A = struct('one', [A.one], 'two', [A.two]);

一般来说:

D = [fieldnames(A), cellfun(@(x) [A.(x)], fieldnames(A), 'Uni', false)].';
A = struct(D{:});

旧答案:

你可以通过 转换它们

A.one = [A.one];
A.two = [A.two];

一般

for theField = fieldnames(A)'
F = theField{1};
A.(F) = [A.(F)];
end

关于MATLAB:嵌套函数和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186982/

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