如何在C#中获取System.Numerics.Vector的元素?

时间:2019-01-30 14:24:34

标签: c# vector count system.numerics

我想在C#中访问System.Numerics.Vector<T>的元素。 我正在关注官方文档:https://docs.microsoft.com/en-us/dotnet/api/system.numerics.vector-1?view=netcore-2.2

我能够创建具有不同数据类型的不同向量。 例如:var test = new Vector<double>(new double[] { 1.0, 2.0, 1.0 });

但是现在我有一个问题,我无法调用test.Count;。无法在类型为System.Numerics.Vector<T>的实例上调用Count。

我可以使用access operator []访问单个元素,但是我不知道向量中有多少个元素。

根据文档,应该有公共财产:

public static int Count { get; }

但是我无法调用我的System.Numerics.Vector<T>实例。相反,我只能以静态方式调用它,如下所示:

Vector<double>.Count

这等于2。

我还可以致电:

Vector<Int32>.Count

返回:4和

Vector<Int16>.Count

返回8。

现在,关于如何使用此静态属性,我确实有点困惑。最初,我认为该属性将返回存储在向量中的元素数量(如文档中所述)。其次,我认为该属性返回内存中向量的大小,但是这个数字从double增大到Int32到Int16。

有趣的是,我无法从以下对象创建的实例中调用此静态属性:

var test = new Vector<double>(new double[] { 1.0, 2.0, 1.0 });

我无法致电test.Count

您知道如何访问System.Numerics.Vector<T>的元素吗?

2 个答案:

答案 0 :(得分:5)

没有办法做到。 Vector<T>的大小是固定的,因为它正在尝试针对硬件加速进行优化。文档状态:

  

Vector<T>实例的计数是固定的,但其上限取决于CPU寄存器。它打算用作向量化大型算法的构建块。

https://source.dot.net/#System.Private.CoreLib/shared/System/Numerics/Vector.cs上阅读源代码

表明如果需要传递的数据较少,它将抛出该异常,并且最多只占Count个传入的项目。

答案 1 :(得分:0)

Vector<T>.Count属性仅显示它可以容纳多少个具体类型的元素。这就是为什么其值仅从double增加到short int的原因。您只能在其中容纳16个字节,即2个double变量,4个int变量,8个short int变量等。