2013-10-23 3 views
2

으로 Math.Net 메릭스을 사용하여 두 벡터의 값을 추가 vdB.는 I는 다음과 같이 두 벡터가 수치 C#

vdX = { 
     8.0, 9.0, 10.0 11.0, 
     7.0, 8.0, 9.0, 10.0, 
     6.0, 7.0, 8.0, 9.0 
     } 

MathNet.Numerics를 사용하여이 작업을 수행 할 수 없습니다. C#에서

나는 C#에서 Math.Net 메릭스와 빠른 이러한 목표를 달성하기 위해 다른 옵션이이 코드는이

Vector<double> vdA = new DenseVector(new[] { 8.0, 7.0, 6.0 }); 
Vector<double> vdB = new DenseVector(new[] { 0.0, 1.0, 2.0, 3.0 }); 

List<double> resultSumVector = new List<double>(); 
foreach (double vectorValueA in vdA.Enumerate()) 
    foreach (double vectorValueB in vdB.Enumerate()) 
     resultSumVector.Add(vectorValueA + vectorValueB); 
Vector<double> vdX = new DenseVector(resultSumVector.ToArray()); 

할 수 있도록?

답변

1

기본적으로 cross join in Linq이 필요합니다.

namespace MathNet.Numerics 
{ 
    public static class DenseVectorExtensions 
    { 
     public static DenseVector AddAlls(this DenseVector vdA, DenseVector vdB) 
     { 
      return DenseVector.OfEnumerable(
        vdA.SelectMany(x => vdB, (y, z) => { return y + z; }) 
       ); 
     } 
    } 
} 

사용법 :

var vdA = new DenseVector(new[] { 8.0, 7.0, 6.0 }); 
var vdB = new DenseVector(new[] { 0.0, 1.0, 2.0, 3.0 }); 
var vdX = vdA.AddAlls(vdB); 

이 특히 빠른되지 않습니다 당신은 확장 방법을 쓸 수 있습니다, 그것은처럼 보이는이 방법은 Math.Net 방법입니다.

관련 문제