关于混合型值矩阵的存储问题

时间:2011-11-23 04:31:20

标签: matlab

我的程序中有一个循环,并且在每次迭代期间都会生成一个ID。我想将这些ID存储到二维数组中,即A. A的第一列存储迭代次数,即A(1,1)= 1和A(2,1)= 2。 A存储在每次迭代期间生成的ID,即A(1,2)存储在第一次迭代期间生成的ID。棘手的部分是这些ID可以是数值或字符串。例如,A(1,2)= 12345; A(2,2)= abcde

我应该使用哪种数据结构来存储这个混合值矩阵?

1 个答案:

答案 0 :(得分:1)

你有两个不错的选择,一个单元格数组或一组结构。

  1. 要使用单元格数组,您需要使用大括号:

    A{1,1} = 1;
    A{2,1} = 2;
    A{1,2} = 12345;
    A{2,2} = 'abcd';
    

    虽然您可以将数字子集转换为数字数组,但不能将大多数矢量化代码用于单元格数组,例如:

    col1 =  cell2mat(A(:,1));
    
  2. 要使用结构数组,您需要定义字段。这样做的好处是您可以命名数据列。

    A(1).iteration = 1;
    A(2).iteration = 2;
    A(1).result = 12345;
    A(2).result = 'abcd';
    

    要访问单行数据,请使用A(1),如此

    >> A(1)
    ans = 
        iteration: 1
        result: 12345
    

    要访问数据列,请使用括号或大括号

    >> [A.iteration]  %This results a numeric array, or an error if not possible
    ans =
         1     2
    >> {A.result}  %This returns a cell array, as discussed above.
    ans = 
        [12345]    'abcd'
    
  3. 您使用哪个选项取决于您的任务的性质以及哪种方法更适合您的风格。我通常从一个单元格数组开始,最终转换为一个结构数组,以利用命名字段。

相关问题