【问题标题】:Mathnet numerics indexing parts of a matrixMathnet 数字索引矩阵的各个部分
【发布时间】:2018-07-13 18:02:14
【问题描述】:

使用 Math.Net Numerics,我如何索引矩阵的各个部分?

例如,我有一个整数集合,我想获得一个子矩阵,其中相应地选择了行和列。

A[2:3,2:3] 应该给我 A 的 2 x 2 子矩阵,其中行索引和列索引是 2 或 3

【问题讨论】:

标签: c# math.net


【解决方案1】:

只需使用类似的东西

var m = Matrix<double>.Build.Dense(6,4,(i,j) => 10*i + j);
m.Column(2); // [2,12,22,32,42,52]

要访问所需的列,请使用Vector&lt;double&gt; Column(int columnIndex) 扩展方法。

【讨论】:

  • 谢谢。但是如果我只想要第二列的一部分呢?
  • 对矩阵M[i, j] 使用索引符号来表示行和列ij。我刚刚阅读了您更新的问题,这没有任何意义。您无法获得子矩阵或向量。向量本质上是一个单列/行矩阵。 MathNET 有很好的文档,我的建议是下载源代码并查看测试项目...
  • 好的,谢谢。也许不是向量的子矩阵,而是整数数组的子矩阵?
  • Math.Net 的subMatrix 矩阵方法很容易为您提供子矩阵。请参阅 See numerics.mathdotnet.com/Matrix.html 中的示例(这似乎来自哪里)
【解决方案2】:

我怀疑您正在寻找类似这种扩展方法的东西。

public static Matrix<double> Sub(this Matrix<double> m, int[] rows, int[] columns)
{
    var output = Matrix<double>.Build.Dense(rows.Length, columns.Length);
    for (int i = 0; i < rows.Length; i++)
    {
        for (int j = 0; j < columns.Length; j++)
        {
            output[i,j] = m[rows[i],columns[j]];
        }
    }

    return output;
}

我省略了异常处理以确保行和列不为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多