Как сделать двойной [,] x_List в C # 3.0? - PullRequest
0 голосов
/ 27 апреля 2010

Мне нужно было реализовать многолинейную регрессию в C # (3.0) с помощью функции LinESt в Excel. В основном я пытаюсь достичь

=LINEST(ACL_returns!I2:I10,ACL_returns!J2:K10,FALSE,TRUE)

Итак, у меня есть данные, как показано ниже

double[] x1 = new double[] { 0.0330, -0.6463, 0.1226, -0.3304, 0.4764, -0.4159, 0.4209, -0.4070, -0.2090 };
double[] x2 = new double[] { -0.2718, -0.2240, -0.1275, -0.0810, 0.0349, -0.5067, 0.0094, -0.4404, -0.1212 };
double[] y = new double[] { 0.4807, -3.7070, -4.5582, -11.2126, -0.7733, 3.7269, 2.7672, 8.3333, 4.7023 };

Я должен написать функцию, подпись которой будет

Compute(double[,] x_List, double[] y_List)
{
   LinEst(x_List,y_List, true, true); < - This is the excel function that I will call.
}

Мой вопрос заключается в том, как с помощью double [] x1 и double [] x2 я получу double [,] x_List?

Я использую C # 3.0 и framework 3.5.

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 27 апреля 2010
double[,] xValues = new double[x1.Length, x2.Length];

for (int i = 0; i < x1.Length; i++)
{
    xValues[i, 0] = x1[i];
    xValues[i, 1] = x2[i];
}
0 голосов
/ 27 апреля 2010

Сторона многомерного массива неверна как в вашем ответе, так и в ответе Бабло. Кроме того, вызов Max на каждой итерации в ответе bablo кажется очень медленным, особенно с большим количеством элементов.

int max = (new int[] { x1.Length, x2.Length }).Max();
double[,] xValues = new double[2, max];

for (int i = 0; i < max; i++)
{
    xValues[0, i] = x1.Length > i ? x1[i] : 0;
    xValues[1, i] = x2.Length > i ? x2[i] : 0;
}
0 голосов
/ 27 апреля 2010

На самом деле это должно быть

double[,] xValues = new double[x1.Length, x2.Length];
int max = (new int[]{ x1.Length,x2.Length}).Max();
for (int i = 0; i < max; i++)
{
xValues[0, i] = x1.Length > i ? x1[i] : 0;
xValues[1, i] = x2.Length > i ? x2[i] : 0;
}

Самир прав, я должен вызывать Max() один раз вне итератора, а не каждую итерацию, я исправил это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...