当前位置: 首页 > 知识库问答 >
问题:

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

龙华翰
2023-03-14

我有一个包含多行和有限(但大于1)列(包含0到9之间的值)的大型矩阵,我希望找到一种有效的方法来识别独特的行组合及其索引,然后构建总和(有些类似于枢轴逻辑)。以下是我努力实现的一个例子:

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]build123)。求和不起作用,因为它们会消除识别唯一组合的可能性。关于如何最好地实现这一点,有什么建议吗?谢谢

共有1个答案

楚威
2023-03-14

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

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

C包含唯一的行;ixC中这些行的第一次出现的索引;ic基本上包含您想要的信息。要访问它,您可以循环遍历ix的索引,并将它们保存在单元格数组中:

indexes = cell(1, length(ix));
for k = 1:length(ix)
  indexes{k} = find(ic == ix(k));
end

索引将是一个单元格数组,其中包含您要查找的索引。例如:

indexes{1}

% ans =
%
% 1
% 4

要计算特定组合的出现次数,只需使用numel。例如:

numel(indexes{1})

% ans = 
%
% 2 
 类似资料:
  • 本文向大家介绍MATLAB索引矩阵和数组,包括了MATLAB索引矩阵和数组的使用技巧和注意事项,需要的朋友参考一下 示例 MATLAB允许使用几种方法来索引(访问)矩阵和数组的元素: 下标索引-您可以在其中分别指定所需元素在矩阵每个维度中的位置。 线性索引-将矩阵视为向量,无论其尺寸如何。这意味着,您可以用一个数字指定矩阵中的每个位置。 逻辑索引-在其中使用逻辑矩阵(以及true和false值的矩

  • 基于我下面链接的相关问题(请参见@Aleh solution):我希望只计算给定幂的矩阵中列之间的唯一乘积。 例如,对于N=5,M=3,p=2,我们得到列(1,1),(1,2),(1,3),(2,1),(2,2),(2,3),(3,1),(3,2),(3,3)的乘积。我想修改(@Aleh)代码,只计算(1,1)、(1,2)、(1,3)、(2,2)、(2,3)、(3,3)列之间的乘积。但我想对每个第

  • 我正在使用LinkedHashSet从ArrayList中获取所有唯一值。 我的代码如下所示:

  • 主要内容:引用矩阵中的元素,删除矩阵中的一行或一列,矩阵运算,以下是纠正/补充内容:矩阵是数字的二维数组。 在MATLAB中,可以通过在每行中输入元素来创建一个矩形,以逗号或空格分隔数字,并使用分号标记每一行的结尾。 例如,创建一个矩阵 - MATLAB将执行上述语句并返回以下结果 - 引用矩阵中的元素 要引用矩阵的第行和第列中的元素,可以这样书写 - 例如,要引用矩阵的第行和第列中的元素,如上一节所述,可以这样书写 - MATLAB执行上述语句并返回以下结果 - 要引用第列中的

  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准

  • 我在3D矩阵(MATLAB)中识别两个最大值的位置时遇到了问题。假设我有矩阵输出,如下所示: 对于第一个,我想确定第一行的值最高。但是我需要两个索引位置,在本例中,和。这与另一个相同。 我已经搜索了这么多,但由于我在MATLAB方面很差,我找不到解决这个问题的方法。 请一定要帮我。如果我不需要使用for循环来获得所需的输出,那就更好了。