我想为我的算法执行的每个循环存储不同矩阵/向量大小的值。我的MWE如下:
-1
-2
有人可以帮助我尽可能高效地完成这项工作吗?理想情况下,我希望每次执行for循环时都存储所有参数值和矩阵的名称,但我不知道这是否可以在MATLAB中实现。
答案 0 :(得分:2)
考虑在结构中使用dynamic field references。这将允许您做的是创建一个输出结构,结果和循环中给定运行的输入。使想法适应您的代码。
for n2=1:maxruns
% Same code as above.
AlgorithmOutput.((strcat('Run',int2str(n2))).input.A1=a1
AlgorithmOutput.((strcat('Run',int2str(n2))).input.A2=a2
% this will store your inputs in something like AlgorithmOutput.Run1.input
AlgorithmOutput.((strcat('Run',int2str(n2))).output.V1=v1;
AlgorithmOutput.((strcat('Run',int2str(n2))).output.V2=v2;
% this will store your inputs in something like AlgorithmOutput.Run1.output
end
此处需要注意的是,您需要确保使用字母而不是数字(matlab命名规则)启动动态引用。您还需要使用类似fields(AlogrithmOutput)
之类的东西,在这种情况下将返回一个单元格数组,然后您可以随后迭代。
如果你有非常深刻和复杂的输入和输出,这会导致一些问题,这应该允许以直观的方式访问任何给定运行的输入/输出,如AlogrithmOutput.Run5.input.A1
等语法。
答案 1 :(得分:1)
根据您要查看的内容,单元格结构将允许您非常方便地在一个结构中查看不同的数组大小/数据类型。
SELECT state.name AS state_name
, COUNT(CASE WHEN place.type = 'city' AND place.population >= 100000 THEN 1 ELSE NULL END) AS no_big_city
, SUM(CASE WHEN place.type = 'city' AND place.population >= 100000 THEN place.population ELSE NULL END) AS big_city_population
FROM state
JOIN place
ON state.code = place.state_code
GROUP BY state_name
HAVING
COUNT(CASE WHEN place.type = 'city' AND place.population >= 100000 THEN 1 ELSE NULL END) >= 5 OR
SUM(CASE WHEN place.type = 'city' AND place.population >= 100000 THEN place.population ELSE NULL END) >= 1000000
ORDER BY state_name;
这里提到的动态struct.field方法也很有效。您必须确定伪数组方法(单元格)或树方法(struct.field)是否最适合访问/查看/存储数据。