Как получить элементы System.Numerics.Vector в C #? - PullRequest
0 голосов
/ 30 января 2019

Я хочу получить доступ к элементам 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

return: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>?

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Свойство Vector.Count показывает только, сколько элементов конкретного типа оно может уместить.И именно поэтому его значение увеличивается только от двойного к короткому целому.Вы можете поместить туда только 16 байт, поэтому 2 двойных, 4 целых, 8 коротких целых и т. Д.

0 голосов
/ 30 января 2019

Нет способа сделать это.Vector<T> имеет фиксированный размер, поскольку он пытается оптимизировать аппаратное ускорение.Состояние документа:

Число экземпляров Vector<T> фиксировано, но его верхний предел зависит от регистра ЦП.Он предназначен для использования в качестве строительного блока для векторизации больших алгоритмов.

Чтение источника в https://source.dot.net/#System.Private.CoreLib/shared/System/Numerics/Vector.cs

Показывает, что он будет выдавать, если в него требуется передать меньше данныхи будет принимать только до Count переданных предметов.

...