假设以下假设的Matlab数据(作为列向量):对于3个受试者(i = 1至3),每个受试者在5个时间点(j = 1至5)或更短的时间内(不平衡)提供三个测量值y1,y2,y3 )。原始数据集更大。所以我需要使用细胞阵列。最后,我需要Y = cell(3,1),这样,对于主题i,Y {i}是一个矩阵,表示针对主题i的重复测量。
GL_TEXTURE_EXTERNAL_OES
所以我需要它们看起来像
i j y1 y2 y3
1 1 1.0 0.6 0.8
1 2 0.8 0.7 0.2
1 3 1.0 0.7 0.9
1 4 1.0 0.8 0.7
1 5 0.7 0.8 0.9
2 1 0.5 0.7 0.8
2 2 0.4 0.7 0.6
2 3 0.4 0.5 0.8
3 1 0.4 0.5 0.7
3 2 0.5 0.6 0.8
3 3 0.5 0.6 0.8
3 4 0.6 0.6 0.8
我还需要使用i和j来帮助建立索引
答案 0 :(得分:0)
我假设输入数据包含在5个向量中,分别称为i
,j
,y1
,y2
和y3
。您可以使用以下代码:
% Initialize Y
Y = cell(max(i),1);
% Loop to read
for kk=1:max(i)
sel = (i==kk); % Logical array use to select lines according to i
ind = j(sel); % This is in case the input data is not sorted, we'll know where the data has to go in Y{...}
% Start with last column so that Y{ii} is initialized with the good size
Y{kk}(ind,3) = y3(sel);
Y{kk}(ind,2) = y2(sel);
Y{kk}(ind,1) = y1(sel);
end
如果所有数据均已按i
和j
排序,则可以使用mat2cell
。仍然需要循环来了解每个i
值的行数:
% Initialize Y
count = zeros(max(i),1);
% Loop to count
for kk=1:max(i)
count(kk)=(i==kk);
end
Y = mat2cell([y1,y2,y3] , count);
(请注意,不建议将i
和j
用作变量名,因为这可能导致与虚构单位i
混淆,并可能影响性能。 Mathworks建议使用其他变量名,并在引用虚数单元时使用1i
或1j
。