5

我想System.Numerics.Vector<T>在 C# 中访问 a 的元素。我正在关注官方文档: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; 无法在 type 的实例上调用 Count System.Numerics.Vector<T>

我可以使用 访问单个元素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>吗?

4

2 回答 2

6

没有办法做到这一点。Vector<T>是固定大小的,因为它试图优化硬件加速。文档状态:

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

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

表明如果传入的数据较少,它将抛出所需的数据,并且只会占用Count传入的项目。

于 2019-01-30T14:44:19.580 回答
0

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

于 2019-07-22T23:48:27.740 回答