我正在研究函数unique
,它看起来很简单,但我不了解某些属性。
我创建了一个矩阵A
并尝试分析输出:
A=[5 2 4 5;
1 1 3 4;
6 1 2 3]
[C0,IA0,IC0]=unique(A)
[Cr,IAr,ICr]=unique(A,'rows')
[Cf,IAf,ICf]=unique(A,'first')
在C0
中,输出的逻辑是“创建一个向量,其中有至少出现一次的值”
但我不知道IA0
和IC0
的含义。我只知道C=A(IA0)
和A=C(IC0)
之间的关系。创建这两个输出只是为了满足这两个关系吗?那么我为什么要对他们的产出感兴趣呢?
在Cr
('rows'示例)中,输出的逻辑是“给我回原始矩阵A
的行,但是按升序排序。另外,如果你找到至少两行或多行重复相同的值和顺序,在Cr
输出中只显示一行“
IAr
的逻辑非常直观:“给我回复必须遵循Cr
输出的索引来排序行。”所以在我的例子中给了我返回像IAr=[2;1;3]
这样的向量。因此,原始矩阵A
的第二行必须是Cr
输出中的第一行,A
矩阵中的第一行必须是Cr
中的第二行... < / p>
但我仍然不理解输出ICr
在Cf
('first'示例)中,我返回与C0
相同的输出。对我来说,如何正确使用这个功能并不是很清楚。
有人能给我一个关于这个功能如何运作的简单解释吗?
是否有任何简单的实际例子可以利用这些其他输出?
答案 0 :(得分:-4)
Matlab是一个通用工具。所以问&#34;为什么&#34;有些函数只是因为某些原因可能对某人有用而提供额外的输出很难回答。
IA0
给出了unique
可能选择的最后元素的索引。 IC0
包含仅使用唯一元素复制A
的索引。它们为什么存在?您不仅可以对唯一值感兴趣,还可以在A
中找到它们的位置。
您误解了rows
的工作原理。它只是将矩阵的行视为原子并返回唯一的行。要更好地了解其工作原理,请在致电A(3,:) = A(2,:)
之前运行unique
。然后,IA0
和IC0
背后的想法与之前的情况相同,但现在除了行。
first
选项仅更改Matlab选择IA0
索引的方式。同样,背后的原因是Matlab是一个通用工具。您可能有兴趣找到每个值的最新重复出现或在第一个值。这取决于你想做什么。