如何在Matlab中根据这种类型的数据创建一个单元数组

时间:2010-01-18 10:40:42

标签: matlab

假设我有3名患者的配置文件,但配置文件的长度不同。我的问题是如何从这个数据创建一个单元格数组(见下文),其中我的单元格数组的每个条目将对应一个患者配置文件。感谢

患者资料

1 2
1 3
1 -2
1 1
1 3
1 2
2 -1
2 -3
2 0
2 -2
3 2
3 2
3 1
3 3
3 2
3 -1
3 -2
3 -3
3 -2
3 -2  

2 个答案:

答案 0 :(得分:5)

使用mat2cell作为引擎。我假设您想要汇总患者配置文件数组的第二列的结果,作为第一列的函数。如果配置文件位于名为PP的数组中:

counts = [6;4;10];
C = mat2cell(PP(:,2),counts)
C = 
    [ 6x1 double]
    [ 4x1 double]
    [10x1 double]

请注意,此步骤已完成将数据提取到单独的单元格中的工作。

C{:}
ans =
     2
     3
    -2
     1
     3
     2
ans =
    -1
    -3
     0
    -2
ans =
     2
     2
     1
     3
     2
    -1
    -2
    -3
    -2
    -2

如果PP未提前分拣,我们需要对第一列PP进行分类。因此,我们需要做的就是知道每个患者对应的条目数。这是accumarray可以处理的任务。

counts = accumarray(PP(:,1),1)
counts =
     6
     4
    10

最后,如果患者标识符列表比数字(1:3)更复杂,那么对unique的调用就能解决这个问题。

答案 1 :(得分:0)

您可以将accumarray与自定义功能

一起使用
profile = accumarray( {PP(:,1) },  PP(:,2), [], @(x) {x} );