问题描述
有MathNET.Numerics等效于Matlab的unique(A,'rows')
(或unique(A)
),其中A
是Matrix<double>
吗?
我在MathNET.Numerics库文档中进行了广泛的搜索,找不到任何类似于此功能的东西。是否已经存在类似的功能?
回顾Matlab的文档:
C = unique(A,'rows')将A的每一行都视为一个实体,并且 返回A的唯一行。数组C的行已排序 订单。
解决方法
没有内在的东西,但是您可以在矩阵的Linq
行上使用Enumerable
的{{3}}方法。给定Matrix<double> x
,
var y = Matrix<double>.Build.DenseOfRows(x.EnumerateRows().Distinct());
将其写为Example:
public static Matrix<double> Unique(this Matrix<double> x) {
return Matrix<double>.Build.DenseOfRows(x.EnumerateRows().Distinct());
}
然后您可以拨打以下电话:
var y = x.Unique();
这不会对行进行排序。如果需要,可以将其与extension method结合使用。
public static Matrix<double> UniqueSorted(this Matrix<double> x,int sortByColumn = 0,bool desc = false) {
var uq = x.EnumerateRows().Distinct();
if (desc)
return Matrix<double>.Build.DenseOfRows(uq.OrderByDescending(row => row[sortByColumn]));
else
return Matrix<double>.Build.DenseOfRows(uq.OrderBy(row => row[sortByColumn]));
}