我想在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>
的元素吗?
答案 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
变量等。