我有一个包含多行和有限(但大于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
,我想首先确定唯一的组合(按行),然后计算出现的次数/确定相应组合的行索引。
我通过使用num2str
和strcat
生成字符串实现了这一点,但这种方法似乎非常慢。根据这些想法,我试图找到一种方法,通过水平连接值来形成一个新的唯一数字,但Matlab似乎不支持这一点(例如,从[1;2;3]
build123
)。求和不起作用,因为它们会消除识别唯一组合的可能性。关于如何最好地实现这一点,有什么建议吗?谢谢
要获取唯一行,您可以在启用了“行”
选项的情况下使用unique
:
[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{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循环来获得所需的输出,那就更好了。