MathNET.Numerics 中 Matlab unique() 的等效功能?

Equivalent functionality of Matlab unique() in MathNET.Numerics?

有没有等价于 Matlab 的 unique(A, 'rows')(或 unique(A))的 MathNET.Numerics,其中 AMatrix<double>

我在 MathNET.Numerics 库文档中进行了广泛搜索,但找不到任何类似此功能的内容。类似的功能是否已经存在?

回顾 Matlab 的文档:

C = unique(A,'rows') treats each row of A as a single entity and returns the unique rows of A. The rows of the array C are in sorted order.

没有任何内置内容,但您可以在矩阵的 Enumerable 行上使用 LinqDistinct() 方法。给定一个 Matrix<double> x,

var y = Matrix<double>.Build.DenseOfRows(x.EnumerateRows().Distinct());

Example

写成 extension method:

public static Matrix<double> Unique(this Matrix<double> x) {
    return Matrix<double>.Build.DenseOfRows(x.EnumerateRows().Distinct());
}

然后您可以将其称为:

var y = x.Unique();

这不会对行进行排序。如果需要,可以将其与 .

结合使用
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]));
}

Here's a big fiddle containing everything