Как получить элементы 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 и так далее.

Другие вопросы по тегам