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

问题描述

有MathNET.Numerics等效于Matlab的unique(A,'rows')(或unique(A)),其中AMatrix<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());

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]));
}

this answer

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...