Как получить элементы System.Numerics.Vector в C#?
Я хочу получить доступ к элементам System.Numerics.Vector<T>
в C#. Я следую официальной документации: 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; невозможно вызвать 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.
И теперь я немного озадачен тем, как использовать это статическое свойство. Сначала я думал, что это свойство будет возвращать количество элементов, хранящихся в векторе (как указано в документации). Во-вторых, я думал, что это свойство возвращает размер вектора в памяти, но это число увеличивается от двойного до Int32 до Int16.
Интересно, что я не могу вызвать это статическое свойство из моего экземпляра, созданного:
var test = new Vector<double>(new double[] { 1.0, 2.0, 1.0 });
Я не могу позвонить test.Count
!
Знаете ли вы, как получить доступ к элементам System.Numerics.Vector<T>
?
1 ответ
Нет способа сделать это. Vector<T>
имеет фиксированный размер, поскольку пытается оптимизировать аппаратное ускорение. Документы утверждают:
Количество
Vector<T>
экземпляр фиксирован, но его верхний предел зависит от регистра ЦП. Он предназначен для использования в качестве строительного блока для векторизации больших алгоритмов.
Чтение источника по адресу https://source.dot.net/#System.Private.CoreLib/shared/System/Numerics/Vector.cs
Показывает, что он выдаст, если будет передано меньше данных, которые требуются и будут занимать только до Count
из предметов, переданных в.
Свойство Vector.Count только показывает, сколько элементов конкретного типа оно может вместить. И поэтому его значение увеличивается только с double до short int. Вы можете поместить туда только 16 байт, поэтому 2 двойных var, 4 int var, 8 коротких int var и так далее.