2D数组问题

5
我正在尝试将一些数据填充到两个数组中,一个包含标准化角度,另一个包含这些角度的sin值。这些数组必须是2D的,因为它们将被传递到训练神经网络的函数中。我尝试声明一个[1][360]数组,但出现了错误,所以我也尝试了[1][],因为Intellisense告诉我这样做,但接着又遇到了另一个问题。
这是我的代码:
double[][] sin_in = new double[1][];
double[][] sin_out = new double[1][];
double deg = 0.0;
const double dtor = 3.141592654 / 180.0;

for (int i = 0; i < 360; i++)
{
    sin_out[0][i] =  Math.Sin(deg * dtor); // complains I need to use new
    sin_in[0][i] = deg / 360.0; //When I use new I get another error
    deg += 1.0;
}
IMLDataSet trainingSet 
    = new BasicMLDataSet(sin_in, sin_out); //Inputs must be [][]

我有哪些错误/误解?
格式要求:

我有哪些错误/误解?


1
请务必记得发布您实际遇到的错误/异常! - Lasse V. Karlsen
3个回答

6
您可以这样初始化二维数组:
double[,] sin_in = new double[1, 360];
double[,] sin_out = new double[1, 360];
double deg = 0.0;
const double dtor = 3.141592654 / 180.0;

for (int i = 0; i < 360; i++)
{
    sin_out[0,i] =  Math.Sin(deg * dtor); // complains I need to use new
    sin_in[0,i] = deg / 360.0; //When I use new I get another error
    deg += 1.0;
}

顺便提一下,在C#中,PI的值已经内置了,并且可以使用双精度浮点数存储尽可能多的小数位数,使用:

const double dtor = Math.PI / 180.0;

4

您正在使用锯齿数组(也称为数组的数组)。如果您需要多维数组,请使用double[,] array = new double[10,10];语法。


0

好的,看来这个函数拒绝多维数组,但是接受锯齿状数组。为了正确形成我的锯齿状数组,我更改了代码如下:

        double[][] sin_in = new double[360][];
        double[][] sin_out = new double[360][];
        double deg = 0.0;
        const double dtor = Math.PI / 180.0;

        for (int i = 0; i < 360; i++)
        {
            sin_out[i] =  new [] {Math.Sin(deg * dtor)};
            sin_in[i] =  new[] {deg / 360.0};
            deg += 1.0;
        }

如果一个维度的大小只有1,为什么你还要使用多维数组呢? - Lasse V. Karlsen
这是我使用的库中BasicMLDataSet类的构造函数所需的。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接