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

How to get the elements of a System.Numerics.Vector in C#?

我想在 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 属性:

public static int Count { get; }

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

Vector<double>.Count

这等于 2。

我也可以打电话:

Vector<Int32>.Count

returning: 4 和

Vector<Int16>.Count

return8.

现在我真的有点困惑,关于如何使用这个静态 属性。起初,我想,这个 属性 会 return 向量中存储的元素数量(如文档中所述)。其次,我想,这个 属性 return 是内存中向量的大小,但是这个数字从 double 增加到 Int32 再到 Int16。

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

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

我打不通test.Count!

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

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

The count of a Vector<T> instance is fixed, but its upper limit is CPU-register dependent. It is intended to be used as a building block for vectorizing large algorithms.

正在 https://source.dot.net/#System.Private.CoreLib/shared/System/Numerics/Vector.cs

阅读源代码

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

Vector.Count 属性 只显示它可以容纳多少具体类型的元素。这就是为什么它的价值只会从 double 增加到 short int。您只能在其中容纳 16 个字节,因此 2 个双精度变量、4 个整数变量、8 个短整数变量等等。