Как создать массив ячеек в Matlab из этого типа данных - PullRequest
3 голосов
/ 18 января 2010

Предположим, у меня есть 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 голосов
/ 18 января 2010

Используйте 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. Поэтому все, что нам нужно сделать, это узнать, сколько записей соответствует каждому пациенту. Это задача, которую может выполнить accmarray.

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

Наконец, если бы список идентификаторов пациентов был более сложным, чем цифры (1: 3), обращение к уникальному решило бы эту проблему для вас.

0 голосов
/ 09 мая 2013

вы можете использовать accumarray с пользовательской функцией

profile = accumarray( {PP(:,1) },  PP(:,2), [], @(x) {x} );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...