2016-02-19 23 views
1

我无法弄清楚如何获得System.Numerics.Vector类型向量中元素的总和。System.Numerics.Vector中元素的总和.NET 4.6中的<T> 4.6

double sum(System.Numerics.Vector<double> vect) 
{ 
    // Something like 
    // double sum = 0; 
    // foreach e in vect { sum += e; } 
    // return sum; 

    // Vector.method??? 
    // For loop ??? 
} 

如果它真的有可能吗?我怎样才能做到这一点?

+4

这个类的知名度很差,也是它没有被添加到.NET Framework中的原因。它代表一个SIMD cpu寄存器,可以存储2个双打或4个浮点数。它应该被命名为SimdRegister。你是否打算创建一个具有任意数量元素的向量? –

+0

你看过'Add()'方法吗? https://msdn.microsoft.com/en-us/library/dn889206(v=vs.111).aspx –

+1

@ stephen.vakil看起来像OP想要总结矢量的元素,而不是将它添加到另一个向量。 – juharr

回答

-3

有可能是另一种方法来做到这一点。我不熟悉.Net中的矢量。

double sum(System.Numerics.Vector<double> vect) 
{ 
    var array = new double[vect.Count]; 
    vect.CopyTo(array); 
    return array.Sum(); 
} 

Documentation for Vector.CopyTo(...)

+0

为什么创建一个数组,当你可以使用'for'循环来创建总和? – juharr

+0

我在'Vector '的文档中看不到索引器。你确定for循环会起作用吗? – Amy

+0

这里是https://msdn.microsoft.com/en-us/library/dn858375(v=vs.111).aspx – juharr

1

假设你没打算有Vector可能含有(在今天的硬件)2个或4双打,这将总结他们。

double vectorSum = Vector.Dot(yourDoubleVector, Vector<double>.One); 

Dot方法计算两个向量的点积,这是为两个向量A和大小nB定义为A1 * B1 + A2 * B2 + ... + An * Bn

因此,一个矢量A的点积和所有的另一种载体1将只是矢量A中项目的总和。