在循环中存储不同大小的向量和矩阵

时间:2016-11-10 19:42:48

标签: arrays matlab loops matrix cell

我想为我的算法执行的每个循环存储不同矩阵/向量大小的值。我的MWE如下:

-1
-2

有人可以帮助我尽可能高效地完成这项工作吗?理想情况下,我希望每次执行for循环时都存储所有参数值和矩阵的名称,但我不知道这是否可以在MATLAB中实现。

2 个答案:

答案 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)是否最适合访问/查看/存储数据。