Есть ли способ поддержать 0x0 Matrix на Math.Net?

Я использую матрицу Nx2 для хранения списка точек, которые образуют многоугольник.

У меня есть функция, которая возвращает подматрицу Nx2, содержащую точки над линией с простым уравнением, например, y = 6.

Проблема в том, что иногда у подматрицы не будет точек.

Тогда я хочу сделать что-то вроде:

using MathNet.Numerics.LinearAlgebra.Double;
double[,] pontos = { { }, { } };
Matrix mat = DenseMatrix.OfArray(pontos);

Есть ли способ поддержать матрицу 0x0 и иметь Matrix.RowCount == 0?

Спасибо,

Дэвид

0 ответов

То, что вы ищете, невозможно. При создании любыхMatrix MathNet всегда приходит к созданию MatrixStorage с конструктором:

// MathNet.Numerics.LinearAlgebra.Storage.MatrixStorage<T>
using MathNet.Numerics.Properties;
using System;
using System.Runtime.Serialization;

protected MatrixStorage(int rowCount, int columnCount)
{
    if (rowCount <= 0)
    {
        throw new ArgumentOutOfRangeException("rowCount", Resources.MatrixRowsMustBePositive);
    }
    if (columnCount <= 0)
    {
        throw new ArgumentOutOfRangeException("columnCount", Resources.MatrixColumnsMustBePositive);
    }
    RowCount = rowCount;
    ColumnCount = columnCount;
}

Так как видно не 0x0 Matrix возможно с MathNet.

Обновить:

Можно сделать такой взлом:

static class EmptyDenseMatrix
{
    public static DenseMatrix Create()
    {
        var storage = DenseColumnMajorMatrixStorage<double>.OfArray(new double[1, 1]);
        var type = typeof(DenseColumnMajorMatrixStorage<double>);
        type.GetField("RowCount").SetValue(storage, 0);
        type.GetField("ColumnCount").SetValue(storage, 0);
        type.GetField("Data").SetValue(storage, new double[0]);

        return new DenseMatrix(storage);
    }
}

Применение:

Console.WriteLine(EmptyDenseMatrix.Create());

Дает:

DenseMatrix 0x0-Double

Но нет ничего значимого, что вы можете сделать с такой матрицей внутри MathNet, например

Console.WriteLine(EmptyDenseMatrix.Create()* EmptyDenseMatrix.Create());

Дает:

System.ArgumentOutOfRangeException: количество строк матрицы должно быть положительным.

Другие вопросы по тегам