我的问题可能有点“愚蠢”,但我被困在这里,所以我真的需要你的帮助。
所以,我们有一个单元格数组Q 5520x1 ,如下所示:
我只对每行的前两个数字感兴趣。要明确说明,给予
K>> Q {1}
ans = 0 1 0 238
我只关心0和1,依此类推其他行。 只有每行的前两个数字。让我们忽略Q的每一行中的其余值,它们或多或少都无关紧要。
我的问题是,如何检查单元格数组Q中每一行的第一个值(在0以上的示例中)是否保持不变?我想要实现的是,而第一个值是相同的,我想存储在另一个单元格数组中,所有第二个值。在数字0的情况下,我想存储值
[1,3,127,129,216,217,252,253,302,303,342,343]
等等。怎么可以这样做?
非常感谢任何帮助或建议。
答案 0 :(得分:2)
您可以按如下方式使用unique
和accumarray
:
Q = {[0 1 0 238]
[0 3 1 84]
[1 2 1 85]
[3 4 5 6]}; %// example data. Cell array of equal-size row vectors
Qm = vertcat(Q{:}); %// convert Q into matrix
[vals, ~, id] = unique(Qm(:,1)); %// get unique id for 1st col
result = accumarray(id, Qm(:,2), [], @(x){x.'}); %'// gather 2nd col values according to id
这给出了:
vals =
0
1
3
result{1} =
1 3
result{2} =
2
result{3} =
4
答案 1 :(得分:2)
% Example Q
Q = {[0 1 135 134];
[0 3 154 26];
[0 16 146 234];
[1 2 324 125];
[1 7 213 252]};
A = cell2mat(Q(1:2760));
[~,~,ind2] = unique(A(:,1));
C = arrayfun(@(x)A(find(ind2==x),2),1:max(ind2),'UniformOutput',false);
C{1}
ans =
1
3
16
C{2}
ans =
2
7
答案 2 :(得分:0)
您可以使用for循环执行此操作:
cell_range = max(cellfun(@(x) x(1),Q));
C = cell(cell_range,1)
for i = 1:length(Q)
M = Q{i};
disp(M(1));
C{M(1)} = [C{M(1)}, M(2)];
end