Matlab在矩阵和各自的索引中找到唯一的列组合

时间:2017-03-22 15:28:46

标签: matlab matrix indexing

我有一个包含多行和一个有限(但大于1)数量的列的大矩阵,其中包含0到9之间的值,并希望找到一种有效的方法来识别唯一的行方式组合及其索引构建总和(somehwat就像一个枢轴逻辑)。这是我想要实现的一个例子:

a =

 1     2     3
 2     2     3
 3     2     1
 1     2     3
 3     2     1

uniqueCombs =

 1     2     3
 2     2     3
 3     2     1

numOccurrences =

 2
 1
 2

indizies:

[1;4]
[2]
[3;5]

从矩阵a,我想首先确定唯一的组合(按行),然后计算出现次数/识别相应组合的行索引。

我通过使用num2strstrcat生成字符串来实现此目的,但此方法似乎非常慢。根据这些想法,我试图找到一种通过水平连接值来形成新的唯一数字的方法,但Matlab似乎不支持这一点(例如来自[1;2;3] build 123)。总和不会起作用,因为它们会消除识别独特组合的可能性。有关如何最好地实现这一点的任何建议?谢谢!

1 个答案:

答案 0 :(得分:0)

要获取唯一行,您可以在启用unique选项的情况下使用'rows'

[C, ix, ic] = unique(a, 'rows', 'stable');

C包含唯一的行; ix C中第一次出现这些行的索引ic; ix基本上包含您想要的信息。要访问它,您可以遍历indexes = cell(1, length(ix)); for k = 1:length(ix) indexes{k} = find(ic == ix(k)); end 的索引并将它们保存在单元格数组中:

indexes

indexes{1} % ans = % % 1 % 4 将是一个包含您要查找的索引的单元格数组。例如:

numel

要计算特定组合的出现次数,您只需使用numel(indexes{1}) % ans = % % 2 即可。例如:

class Tag(models.Model):
   key = models.CharField(max_length=200)

class Post(models.Model):
   name = models.CharField(max_length=200)
   tags = models.ManyToManyField(Tag)