如何在MATLAB中高效地查找和合并向量的重复项?
我正在编写一个MATLAB代码来快速解决以下问题:设X是一个根据p(X)分布的随机变量,取X的两个独立副本,称它们为X1和X2,并找到Y=f(X1,X2)的分布,其中f(,)是一个已知函数 为了解决上述问题,我从两个向量如何在MATLAB中高效地查找和合并向量的重复项?,matlab,sorting,unique,Matlab,Sorting,Unique,我正在编写一个MATLAB代码来快速解决以下问题:设X是一个根据p(X)分布的随机变量,取X的两个独立副本,称它们为X1和X2,并找到Y=f(X1,X2)的分布,其中f(,)是一个已知函数 为了解决上述问题,我从两个向量x和p开始,这样p(I)=p(x(I))。假设它们都包含n元素。我可以很容易地计算n-by-n矩阵y,这样y(I,j)=f(x(I),x(j))。此外,我可以通过矩阵p_out计算n,从而p_out(I,j)=p(I)*p(j)。这意味着P(Y=Y(i,j))=P(i,j) 现在
x
和p
开始,这样p(I)
=p(x(I)
)。假设它们都包含n
元素。我可以很容易地计算n
-by-n
矩阵y
,这样y(I,j)
=f(x(I)
,x(j)
)。此外,我可以通过矩阵p_out
计算n
,从而p_out(I,j)=p(I)*p(j)
。这意味着P(Y=Y(i,j)
)=P(i,j)
现在,如果y
的所有元素都是不同的,我们就差不多完成了。它仍然只是将矩阵转换为向量,或许还可以对它们进行排序,以获得良好的输出。假设我们也通过设置
y = y(:);
p_out = p_out(:);
[y, idx] = sort(y);
p_out = p_out(idx);
然而,问题是y
的元素通常不是唯一的。一、 因此,必须按如下方式合并y
的相同元素:如果y(I)=y(j)
(记住现在y
被转换为向量),然后删除y(j)
,并设置p(I)=p(I)+p(j)
。一种肮脏的方法是使用for循环(因为y
现在已排序,我们只需要将每个元素与其下一个元素进行比较)。然而,我想知道是否有更好的方法
我知道
unique
将删除向量的重复元素(因此,如果我们只需要y
就足够了)。我还知道它返回两个索引向量,以某种方式指示重复元素的位置。但是,我想不出任何好的方法来使用它的输出来适当地合并p
的元素。如果我理解正确,这是一项针对以下人员的工作:
结果:
>> y_unique
y_unique =
1 2 3 4 5 6
p_summed =
0.4000 0.7000 0.5000 0.2000 0.4000 0.1000
也许这能帮上忙:@LuisMendo谢谢。我想那是另一个问题。非常感谢。我一直在寻找这样一个函数!这种独特的用法可能是我最喜欢的MATLAB习惯用法+1@chappjc如果可以组合成一行就好了,例如,如果
unique
的期望输出是第一行,而不是第三行,那么我认为两行就可以了!
>> y_unique
y_unique =
1 2 3 4 5 6
p_summed =
0.4000 0.7000 0.5000 0.2000 0.4000 0.1000