类型转换错误,c#

时间:2011-10-04 14:11:13

标签: c#

我在C#中使用高级矩阵库。净@ http://www.codeproject.com/KB/recipes/AdvancedMatrixLibrary.aspx?msg=4042613#xx4042613xx.

库css文件就像

using System;

namespace MatrixLibrary
{
public class Matrix
    {
      private double[,] in_Mat;
            public Matrix(int noRows, int noCols)
    {
        this.in_Mat = new double[noRows, noCols];
    }
            public Matrix(double [,] Mat)
    {
        this.in_Mat = (double[,])Mat.Clone();
    }

        public static double[,] Identity(int n)
        {
            double[,] temp = new double[n,n];
            for (int i=0; i<n;i++) temp[i,i] = 1;
            return temp;
        }

public static double[,] ScalarDivide(double Value, double[,] Mat)
    {
        int i, j, Rows, Cols;
        double[,] sol;

        try  {Find_R_C(Mat, out Rows, out Cols);}
        catch{throw new MatrixNullException();}

        sol = new double[Rows+1, Cols+1];

        for (i = 0; i<=Rows;i++)
            for (j = 0; j<=Cols;j++)
                sol[i, j] = Mat[i, j] / Value;

        return sol;
    }


}}

我正在尝试获取单位矩阵并获得类型转换的错误。有人可以指导我。

Matrix id_mat = MatrixLibrary.Matrix.Identity(6);

无法将typedouble []转换为Matrix。

但是

Matrix B = new Matrix(4, 4);
 Random rnd = new Random();
            for (int i = 0; i < B.NoRows; i++)
                for (int j = 0; j < B.NoCols; j++)
                    B[i, j] = 2 * rnd.NextDouble();

Matrix E = Matrix.ScalarDivide(2, B);

它有效,我可以有一个矩阵。请指导我?

的问候,

3 个答案:

答案 0 :(得分:2)

阅读错误消息。

您有一个返回double[,]的方法,并且您尝试将引用存储在Matrix的变量中。没有从多维数组的双精度到Matrix的隐式转换。

要使用该方法,您可以编写

double[,] id_max = MatrixLibrary.Maxtrix.Identify(6);

如果您确实需要将其存储为Matrix,则需要定义相应的转换。

答案 1 :(得分:0)

该函数返回一个2D数组“double [,]”,并且您尝试将其分配给“Matrix”。没有隐式转换可以做到这一点。 Matrix有一个接受“double [,]”的构造函数吗?也许你可以使用它。

编辑:您可能还会发现一个不同的矩阵库比一个拉出CodeProject的矩阵库更适合您。 Math.NET Numerics是一个很好用的,我也用它也是开源的:http://numerics.mathdotnet.com/

答案 2 :(得分:0)

你需要隐式演员。

public static implicit operator Matrix(double[,] m) 
{
  // code to convert 
}