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
我的问题可能有点"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