我正在尝试将一些数据填充到两个数组中,一个包含标准化角度,另一个包含这些角度的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 [][]
那么我犯了什么错误/误解?
答案 0 :(得分: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;
}
哦,顺便说一句,PI的值是在c#中内置的,只要有多少小数就适合双倍,请使用
const double dtor = Math.PI / 180.0;
答案 1 :(得分:4)
您正在使用锯齿状数组(也称为数组数组)。如果需要多维数组,请使用double[,] array = new double[10,10];
语法。
答案 2 :(得分: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;
}