在Octave中,我如何将一个单元格数组和两个标量结合起来,以获得一个由字符串、标量1、标量2元素组成的单元格数组,避免循环?

问题描述 投票:1回答:1

我有一个像P这样的单元格数组和另外两个浮动变量。

P = {"GG+G[G]", "GG", "GG-GGG", "GG[][GG]", "[G[GG-G]]", "G[GG]+[G]"};
val1 = 0.01;
val2 = 0.3;

而我想在不使用循环的情况下建立以下数据结构,因为P单元格数组可以包含大量的元素。

Inputparam = 
{
    [1,1] = {
              [1,1] = "GG+G[G]"
              [1,2] = 0.01
              [1,3] = 0.3
            }
    [1,2] = {
              [1,1] = "GG"
              [1,2] = 0.01
              [1,3] = 0.3
            }
    [1,3] = {
              [1,1] = "GG-GGG"
              [1,2] = 0.01
              [1,3] = 0.3
            }
    [1,4] = {
              [1,1] = "GG[][GG]"
              [1,2] = 0.01
              [1,3] = 0.3
            }
    [1,5] = {
              [1,1] = "[G[GG-G]]"
              [1,2] = 0.01
              [1,3] = 0.3
            }
    [1,6] = {
              [1,1] = "G[GG]+[G]"
              [1,2] = 0.01
              [1,3] = 0.3
            }
}

我试过几种方案,但大多数方案得到的都是一个连接而不是元素的组合。

这个结构的目的是作为参数的 parcellfun 函数,这就是为什么我需要让P的每个元素,与 val1val2 值。

我也在考虑使用anonymum函数,而不是在内存中分配所有这些数据,这样做有意义吗?

先谢谢你。

combinations octave cell-array
1个回答
0
投票

我建议,不要用单元格数组的单元格数组,而是创建一个二维单元格数组,只是因为这样更容易生成,而且,对于大数组来说,它占用的内存也更少。

P = {"GG+G[G]", "GG", "GG-GGG", "GG[][GG]", "[G[GG-G]]", "G[GG]+[G]"};
P(2,:) = 0.01;
P(3,:) = 0.2;

单元格数组的索引是用 P{1,5}而不是 P{5}{1} 作为OP中的单元格数组。

另一种选择是使用结构体数组。

P = {"GG+G[G]", "GG", "GG-GGG", "GG[][GG]", "[G[GG-G]]", "G[GG]+[G]"};
P = struct('name',P,'val1',0.01,'val2',0.2);

结构体的索引为 P(5).name 而非 P{5}{1} (和 P(5).val1 而不是 P{5}{2}、等)。)

© www.soinside.com 2019 - 2024. All rights reserved.