15 сентября 2010 г.

Матричное произведение с помощью LINQ

Бороздя просторы рунета матраска наткнулся на примечательную статью «Поиск декартового произведения с помощью LINQ» на Хабре. А оно не единственное на этом глобусе! Надо вспомнить еще и матричное произведение.  ( эта тема долго не отпускала автора) => Необходимо найти произведение строки на вектор. Практически это означает что надо перемножить элементы двух массивов|списков с одинаковыми порядковыми номерами.
умножение строки на вектор, получаем скаляр
Такая задача может понадобится для перемножения матриц. Поэтому ниже представлен пример LINQ запроса возвращающий список перемноженных элементов. Не буду изголятся воспользуюсь функцией join :
double[] s1 = { 1, 2 };
double[] s2 = { 7, 8 };

var t1 = s1.Select((e, i) => new { element = e, index = i });
var t2 = s2.Select((e, i) => new { element = e, index = i });

var t3 = from o1 in t1 join o2 in t2 on o1.index equals o2.index select (double)o1.element*(double)o2.element;

foreach(double t in t3) Console.WriteLine("T: {0}", t);


* This source code was highlighted with Source Code Highlighter.

Комментариев нет:

Отправить комментарий