MATLAB:检查元胞数组中的值是否保持不变

MATLAB: Check if a value in a cell array remains the same

我的问题可能有点"silly",但我卡在这里,所以我真的需要你的帮助。

所以,我们有一个元胞数组 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]

等等。这怎么可能?

如有任何帮助或建议,我们将不胜感激。

你可以用 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

您可以按如下方式使用unique and 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
% 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