gpt4 book ai didi

matlab - 计算充满向量的单元格中的唯一行

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:36 26 4
gpt4 key购买 nike

我在 MATLAB 中有一个单元格,其中每个元素都包含一个不同长度的向量

例如

C = {[1 2 3], [2 4 5 6], [1 2 3], [6 4], [7 6 4 3], [4 6], [6 4]}

如您所见,一些向量是重复的,另一些是唯一的。

我想计算每个向量出现的次数并返回计数,这样我就可以在 GUI 中填充一个表格,其中每一行都是一个唯一的组合,日期显示每个组合出现的次数。

例如

            Count
"[1 2 3]" 2
"[6 4]" 2
"[2 4 5 6]" 1
"[7 6 4 3]" 1
"[4 6]" 1

我应该说每个向量中数字的顺序很重要,即 [6 4] 与 [4 6] 不同。

有什么想法可以相当有效地做到这一点吗?

感谢到目前为止发表评论的人。正如@Divakar 友善地指出的那样,我忘了提到向量中的值可以超过一位数。即 [46, 36 28]。我的原始代码会将向量 [1 2 3 4] 连接到 1234 中,然后使用 hist 进行计数。当然,当你得到超过个位数时,这就会分崩离析,因为你可以分辨出 [1, 2, 3, 4][12, 34] 之间的区别。

最佳答案

您可以将所有条目转换为 char,然后转换为二维数值数组,最后使用 unique(...'rows') 获取唯一行的标签并使用它们来获取它们的计数.

C = {[46, 36 28], [2 4 5 6], [46, 36 28], [6 4], [7 6 4 3], [4 6], [6 4]} %// Input

char_array1 = char(C{:})-0; %// convert input cell array to a char array
[~,unqlabels,entry_labels] = unique(char_array1,'rows'); %// get unique rows
count = histc(entry_labels,1:max(entry_labels)); %// counts of each unique row

为了以问题中要求的格式呈现输出,您可以使用此 -

out = [C(unqlabels)' num2cell(count)];

输出-

out = 
[1x4 double] [1]
[1x2 double] [1]
[1x2 double] [2]
[1x4 double] [1]
[1x3 double] [2]

并使用 celldisp 显示唯一行 -

ans{1} =
2 4 5 6
ans{2} =
4 6
ans{3} =
6 4
ans{4} =
7 6 4 3
ans{5} =
46 36 28

编辑:如果你在那里有负数,你需要做更多的工作来设置 char_array1 如下所示,其余代码保持不变 -

lens = cellfun(@numel,C);
mat1(max(lens),numel(lens))=0;
mat1(bsxfun(@ge,lens,[1:max(lens)]')) = horzcat(C{:});
char_array1 = mat1';

关于matlab - 计算充满向量的单元格中的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26065756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com