如何从这种类型的数据在Matlab中创建一个cell数组

3
假设我有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个回答

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 就可以为您解决这个问题。

0

你可以使用 accumarray 函数和自定义函数一起使用

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接