【问题标题】:How can I convert matrix<double> to Matrix<float>?如何将 matrix<double> 转换为 Matrix<float>?
【发布时间】:2015-07-23 14:03:54
【问题描述】:

我想计算类似:Matrix&lt;float&gt; * Matrix&lt;double&gt;

Matrix&lt;float&gt; 有大约 6M*3 个元素,我怎样才能将Matrix&lt;double&gt; 转换为Matrix&lt;float&gt; 以便得到Matrix&lt;float&gt; 结果。

【问题讨论】:

  • “非常大”有多大,并且创建了原始Matrix&lt;float&gt; 的副本(但使用double 值)非常慢/内存不足? (如果你最后没有尝试过,这似乎是最简单的选择......)
  • 为什么结果矩阵不能是矩阵
  • 这个矩阵 有大约 6M * 3 个元素

标签: c# math.net mathnet-numerics


【解决方案1】:

您可以使用Map 函数将双矩阵参数转换为浮点矩阵:

Matrix<double> m1 = Matrix<double>.Build.Random(6000000,3);
Matrix<float> m2 = m1.Map(x => (float)x);

或者

Matrix<float> m2 = m1.Map(Convert.ToSingle);

【讨论】:

    【解决方案2】:

    以下是如何将双精度数组转换为浮点数组,然后您只需要将矩阵转换为数组,反之亦然

    public static float[][] Convert(double[][] mtx)
    {
        var floatMtx = new float[mtx.Length][];
        for (int i = 0; i < mtx.Length; i++)
        {
            floatMtx[i] = new float[mtx[i].Length];
            for (int j = 0; j < mtx[i].Length; j++)
                floatMtx[i][j] = (float)mtx[i][j];
        }
        return floatMtx;
    }
    Or:
    
    public static float[][] Convert(double[][] mtx)
    {
        return mtx.Select(i => i.Select(j => (float)j).ToArray()).ToArray();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      相关资源
      最近更新 更多