Класс DoubleVector
public abstract sealed class DoubleVector extends Vector<Double>
Vector, представляющий упорядоченную неизменяемую последовательность значений double.Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final VectorSpecies |
SPECIES_128 |
Вид, представляющий DoubleVector с разрядностью VectorShape.S_128_BIT. |
static final VectorSpecies |
SPECIES_256 |
Вид, представляющий DoubleVector с разрядностью VectorShape.S_256_BIT. |
static final VectorSpecies |
SPECIES_512 |
Вид, представляющий DoubleVector с разрядностью VectorShape.S_512_BIT. |
static final VectorSpecies |
SPECIES_64 |
Вид, представляющий DoubleVector с разрядностью VectorShape.S_64_BIT. |
static final VectorSpecies |
SPECIES_MAX |
Вид, представляющий DoubleVector с разрядностью VectorShape.S_Max_BIT. |
static final VectorSpecies |
SPECIES_PREFERRED |
Предпочтительный вид для DoubleVector. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
final DoubleVector |
abs() |
Возвращает абсолютное значение этого вектора. |
final DoubleVector |
add |
Прибавляет к этому вектору значение скалярного входного параметра, размноженное на все элементы. |
final DoubleVector |
add |
Прибавляет к этому вектору значение скалярного входного параметра, размноженное на все элементы, выбирая элементы согласно маске. |
final DoubleVector |
add |
Прибавляет к этому вектору второй входной вектор. |
final DoubleVector |
add |
Прибавляет к этому вектору второй входной вектор, выбирая элементы согласно маске. |
abstract DoubleVector |
addIndex |
Прибавляет к элементам этого вектора соответствующие им номера, умноженные на заданную константу. |
final DoubleVector |
blend |
Заменяет выбранные элементы этого вектора скалярным значением согласно маске. |
final DoubleVector |
blend |
Заменяет выбранные элементы этого вектора скалярным значением согласно маске. |
abstract DoubleVector |
blend |
Заменяет выбранные элементы этого вектора соответствующими элементами второго входного вектора согласно маске. |
abstract DoubleVector |
broadcast |
Возвращает вектор того же вида, что и этот, все элементы которого установлены в примитивное значение e. |
abstract DoubleVector |
broadcast |
Возвращает вектор того же вида, что и этот, все элементы которого установлены в примитивное значение e. |
static DoubleVector |
broadcast |
Возвращает вектор указанного вида, все элементы которого установлены в примитивное значение e. |
static DoubleVector |
broadcast |
Возвращает вектор указанного вида, все элементы которого установлены в примитивное значение e. |
final <F> Vector |
castShape |
Удобный метод преобразования вектора из одного типа элементов в другой с изменением формы при необходимости, если размеры элементов отличаются. |
final <F> Vector |
check |
Проверяет, что этот вектор имеет указанный тип элементов, и возвращает его без изменений. |
final <F> Vector |
check |
Проверяет, что этот вектор имеет указанный вид, и возвращает его без изменений. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его со скалярным входным параметром согласно заданной операции сравнения. |
final VectorMask |
compare |
Проверяет этот вектор, сравнивая его со скалярным входным параметром согласно заданной операции сравнения для элементов, выбранных маской. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его со скалярным входным параметром согласно заданной операции сравнения. |
final VectorMask |
compare |
Проверяет этот вектор, сравнивая его со скалярным входным параметром согласно заданной операции сравнения для элементов, выбранных маской. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его со вторым входным вектором согласно заданной операции сравнения. |
abstract DoubleVector |
compress |
Сжимает элементы этого вектора, выбирая элементы согласно заданной маске. |
final <F> Vector |
convert |
Преобразует этот вектор в вектор той же формы с новым типом элементов, преобразуя значения элементов из текущего типа ETYPE в новый тип элементов (здесь называемый FTYPE) согласно указанному преобразованию. |
abstract <F> Vector |
convertShape |
Преобразует этот вектор в вектор указанного вида, формы и типа элементов, преобразуя значения элементов из текущего типа ETYPE в новый тип элементов (здесь называемый FTYPE) согласно указанному преобразованию. |
final DoubleVector |
div |
Делит этот вектор на скалярный входной параметр, размноженный на все элементы. |
final DoubleVector |
div |
Делит этот вектор на скалярный входной параметр, размноженный на все элементы, выбирая элементы согласно маске. |
final DoubleVector |
div |
Делит этот вектор на второй входной вектор. |
final DoubleVector |
div |
Делит этот вектор на второй входной вектор согласно маске. |
final VectorMask |
eq |
Проверяет, равен ли этот вектор скалярному входному параметру. |
final VectorMask |
eq |
Проверяет, равен ли этот вектор другому входному вектору. |
final boolean |
equals |
Указывает, идентичен ли этот вектор некоторому другому объекту. |
abstract DoubleVector |
expand |
Расширяет элементы этого вектора согласно заданной маске. |
final DoubleVector |
fma |
Умножает этот вектор на скалярный множитель и прибавляет к результату скалярное слагаемое. |
final DoubleVector |
fma |
Умножает этот вектор на второй входной вектор и прибавляет к результату третий вектор. |
static DoubleVector |
fromArray |
Загружает вектор из массива типа double[], начиная с указанного смещения. |
static DoubleVector |
fromArray |
Собирает новый вектор из элементов массива типа double[], используя индексы, полученные прибавлением фиксированного значения offset к последовательности дополнительных смещений из карты индексов. |
static DoubleVector |
fromArray |
Собирает новый вектор из элементов массива типа double[] согласно маске, используя индексы, полученные прибавлением фиксированного значения offset к последовательности дополнительных смещений из карты индексов. |
static DoubleVector |
fromArray |
Загружает вектор из массива типа double[], начиная с указанного смещения и используя маску. |
static DoubleVector |
fromMemorySegment |
Загружает вектор из сегмента памяти, начиная со смещения в сегменте памяти. |
static DoubleVector |
fromMemorySegment |
Загружает вектор из сегмента памяти, начиная со смещения в сегменте памяти и используя маску. |
protected final Object |
getPayload() |
|
final int |
hashCode() |
Возвращает хеш-код вектора, основанный на значениях его элементов и виде вектора. |
final void |
intoArray |
Сохраняет этот вектор в массив типа double[], начиная с указанного смещения. |
final void |
intoArray |
Распределяет элементы этого вектора по массиву типа double[], используя индексы, полученные прибавлением фиксированного значения offset к последовательности дополнительных смещений из карты индексов. |
final void |
intoArray |
Распределяет элементы этого вектора по массиву типа double[] согласно маске, используя индексы, полученные прибавлением фиксированного значения offset к последовательности дополнительных смещений из карты индексов. |
final void |
intoArray |
Сохраняет этот вектор в массив типа double[], начиная с указанного смещения и используя маску. |
final void |
intoMemorySegment |
Сохраняет этот вектор в сегмент памяти, начиная с указанного смещения и используя явно заданный порядок байтов. |
final void |
intoMemorySegment |
Сохраняет этот вектор в сегмент памяти, начиная с указанного смещения, используя явно заданный порядок байтов и маску. |
abstract double |
lane |
Возвращает элемент с индексом i
|
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значением скалярной величины, размноженной на все элементы. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значением скалярной величины, размноженной на все элементы, выбирая элементы согласно маске. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значением скалярной величины, размноженной на все элементы. |
final DoubleVector |
lanewise |
Объединяет соответствующие значения элементов этого вектора со значениями элементов второго входного вектора, выбирая элементы согласно маске. |
abstract DoubleVector |
lanewise |
Объединяет соответствующие значения элементов этого вектора со значениями элементов второго входного вектора. |
abstract DoubleVector |
lanewise |
Объединяет соответствующие значения элементов этого вектора со значениями элементов второго входного вектора, выбирая элементы согласно маске. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значениями двух скалярных величин, размноженных на все элементы. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значениями двух скалярных величин, размноженных на все элементы, выбирая элементы согласно маске. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значениями другого вектора и скалярной величины, размноженной на все элементы. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значениями другого вектора и скалярной величины, размноженной на все элементы, выбирая элементы согласно маске. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значениями другого вектора и скалярной величины, размноженной на все элементы. |
final DoubleVector |
lanewise |
Объединяет значения элементов этого вектора со значениями другого вектора и скалярной величины, размноженной на все элементы, выбирая элементы согласно маске. |
abstract DoubleVector |
lanewise |
Объединяет соответствующие значения элементов этого вектора с элементами второго и третьего входных векторов. |
abstract DoubleVector |
lanewise |
Объединяет соответствующие значения элементов этого вектора с элементами второго и третьего входных векторов, выбирая элементы согласно маске. |
abstract DoubleVector |
lanewise |
Выполняет операцию над значениями элементов этого вектора. |
abstract DoubleVector |
lanewise |
Выполняет операцию над значениями элементов этого вектора, выбирая элементы согласно маске. |
final VectorMask |
lt |
Проверяет, меньше ли этот вектор скалярного входного параметра. |
final VectorMask |
lt |
Проверяет, меньше ли этот вектор другого входного вектора. |
final VectorMask |
maskAll |
Возвращает маску того же вида, что и этот вектор; каждый ее элемент установлен или не установлен согласно заданному логическому значению, которое распространяется на все элементы. |
final DoubleVector |
max |
Вычисляет максимум этого вектора и скалярного входного параметра, размноженного на все элементы. |
final DoubleVector |
max |
Вычисляет максимум этого вектора и второго входного вектора. |
final DoubleVector |
min |
Вычисляет минимум этого вектора и скалярного входного параметра, размноженного на все элементы. |
final DoubleVector |
min |
Вычисляет минимум этого вектора и второго входного вектора. |
final DoubleVector |
mul |
Умножает этот вектор на скалярный входной параметр, размноженный на все элементы. |
final DoubleVector |
mul |
Умножает этот вектор на скалярный входной параметр, размноженный на все элементы, выбирая элементы согласно маске. |
final DoubleVector |
mul |
Умножает этот вектор на второй входной вектор. |
final DoubleVector |
mul |
Умножает этот вектор на второй входной вектор согласно маске. |
final DoubleVector |
neg() |
Меняет знак этого вектора. |
final DoubleVector |
pow |
Возводит этот вектор в скалярную степень. |
final DoubleVector |
pow |
Возводит этот вектор в степень, заданную вторым входным вектором. |
abstract DoubleVector |
rearrange |
Переставляет элементы этого вектора, выбирая элементы согласно заданной схеме перемешивания. |
abstract DoubleVector |
rearrange |
Переставляет элементы двух векторов, выбирая их согласно заданной схеме перемешивания; для передачи данных использует обычные и специальные индексы в этой схеме. |
abstract DoubleVector |
rearrange |
Переставляет элементы этого вектора, выбирая их согласно заданной схеме перемешивания и маске. |
abstract double |
reduceLanes |
Возвращает значение, полученное накоплением значений всех элементов этого вектора. |
abstract double |
reduceLanes |
Возвращает значение, полученное накоплением значений выбранных элементов этого вектора согласно маске. |
final ByteVector |
reinterpretAsBytes() |
Представляет этот вектор как вектор той же формы и с тем же содержимым, но с типом элементов byte; байты извлекаются из элементов в порядке от младшего к старшему. |
DoubleVector |
reinterpretAsDoubles() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом элементов double; элементы собираются из последовательных байтов в порядке от младшего к старшему. |
FloatVector |
reinterpretAsFloats() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом элементов float; элементы собираются из последовательных байтов в порядке от младшего к старшему. |
IntVector |
reinterpretAsInts() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом элементов int; элементы собираются из последовательных байтов в порядке от младшего к старшему. |
LongVector |
reinterpretAsLongs() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом элементов long; элементы собираются из последовательных байтов в порядке от младшего к старшему. |
ShortVector |
reinterpretAsShorts() |
Переинтерпретирует этот вектор как вектор той же формы и с тем же содержимым, но с типом элементов short; элементы собираются из последовательных байтов в порядке от младшего к старшему. |
abstract DoubleVector |
selectFrom |
Используя значения индексов, хранящиеся в элементах этого вектора, собирает значения, хранящиеся во втором векторе v. |
abstract DoubleVector |
selectFrom |
Используя значения, хранящиеся в элементах этого вектора, собирает значения, хранящиеся во втором векторе v1 и третьем векторе v2. |
abstract DoubleVector |
selectFrom |
Используя значения индексов, хранящиеся в элементах этого вектора, собирает значения, хранящиеся во втором векторе, согласно маске. |
abstract DoubleVector |
slice |
Извлекает сегмент смежных элементов, начиная с указанного origin элемента текущего вектора. |
abstract DoubleVector |
slice |
Извлекает сегмент смежных элементов, начиная с указанного origin элемента текущего вектора и при необходимости продолжая в непосредственно следующем векторе. |
final DoubleVector |
slice |
Извлекает сегмент смежных элементов согласно маске, начиная с указанного origin элемента текущего вектора и при необходимости продолжая в непосредственно следующем векторе. |
final VectorSpecies |
species() |
Возвращает вид этого вектора. |
final DoubleVector |
sqrt() |
Вычисляет квадратный корень этого вектора. |
final DoubleVector |
sub |
Вычитает скалярный входной параметр из этого вектора. |
final DoubleVector |
sub |
Вычитает скалярный входной параметр из этого вектора согласно маске. |
final DoubleVector |
sub |
Вычитает второй входной вектор из этого вектора. |
final DoubleVector |
sub |
Вычитает второй входной вектор из этого вектора согласно маске. |
abstract VectorMask |
test |
Проверяет элементы этого вектора согласно заданной операции. |
abstract VectorMask |
test |
Проверяет выбранные элементы этого вектора согласно заданной операции. |
final double[] |
toArray() |
Возвращает массив типа double[], содержащий значения всех элементов. |
final double[] |
toDoubleArray() |
Возвращает массив double[], содержащий значения всех элементов, преобразованные в тип double. |
final int[] |
toIntArray() |
Возвращает массив int[], содержащий значения всех элементов, преобразованные в тип int. |
final long[] |
toLongArray() |
Возвращает массив long[], содержащий значения всех элементов, преобразованные в тип long. |
final String |
toString() |
Возвращает строковое представление этого вектора в формате "[0,1,2...]", содержащее значения элементов в порядке их следования. |
abstract DoubleVector |
unslice |
Выполняет обратную операцию для slice(), вставляя текущий вектор как сегмент в «фоновый» входной вектор, заполненный нулевыми значениями элементов. |
abstract DoubleVector |
unslice |
Выполняет обратную операцию для slice(), вставляя текущий вектор как сегмент в другой «фоновый» входной вектор, который рассматривается как один из входных параметров гипотетической последующей операции slice(). |
abstract DoubleVector |
unslice |
Выполняет обратную операцию для slice(), вставляя текущий вектор как сегмент в другой «фоновый» входной вектор согласно маске; этот вектор рассматривается как один из входных параметров гипотетической последующей операции slice(). |
final DoubleVector |
viewAsFloatingLanes() |
Представляет этот вектор как вектор той же формы, длины и с тем же содержимым, но с типом элементов с плавающей точкой. |
final LongVector |
viewAsIntegralLanes() |
Представляет этот вектор как вектор той же формы, длины и с тем же содержимым, но с типом элементов, не являющимся типом с плавающей точкой. |
abstract DoubleVector |
withLane |
Заменяет элемент этого вектора с индексом i значением e. |
static DoubleVector |
zero |
Возвращает вектор указанного вида, все элементы которого установлены в ноль — примитивное значение по умолчанию. |
Методы, объявленные в классе Vector
bitSize, byteSize, compare, elementSize, elementType, length, reduceLanesToLong, reduceLanesToLong, reinterpretShape, shape, toShuffle | Модификатор и тип | Метод | Описание |
|---|---|---|
abstract int |
bitSize() |
Возвращает общий размер этого вектора в битах. |
abstract int |
byteSize() |
Возвращает общий размер этого вектора в байтах. |
abstract VectorMask |
compare |
Проверяет этот вектор, сравнивая его со вторым входным вектором согласно заданной операции сравнения для элементов, выбранных маской. |
abstract int |
elementSize() |
Возвращает размер каждого элемента этого вектора в битах. |
abstract Class |
elementType() |
Возвращает примитивный тип элемента ( ETYPE) этого вектора. |
abstract int |
length() |
Возвращает количество элементов, или длину вектора ( VLENGTH). |
abstract long |
reduceLanesToLong |
Возвращает значение, полученное накоплением значений всех элементов этого вектора. |
abstract long |
reduceLanesToLong |
Возвращает значение, полученное накоплением значений выбранных элементов этого вектора согласно маске. |
abstract <F> Vector |
reinterpretShape |
Преобразует этот вектор в вектор указанного вида с типом элементов F, переинтерпретируя байты этого вектора без преобразования значений. |
abstract VectorShape |
shape() |
Возвращает форму этого вектора. |
abstract VectorShuffle |
toShuffle() |
Преобразует этот вектор в схему перемешивания, преобразуя значения элементов в int и рассматривая их как исходные индексы. |
Методы, объявленные в классе Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
protected void |
finalize() |
Устарело и подлежит удалению: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt либо по истечении определённого промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или interrupt либо по истечении определённого промежутка реального времени. |
Подробное описание полей
SPECIES_64
public static final VectorSpecies<Double> SPECIES_64
DoubleVector с VectorShape.S_64_BIT.SPECIES_128
public static final VectorSpecies<Double> SPECIES_128
DoubleVector с VectorShape.S_128_BIT.SPECIES_256
public static final VectorSpecies<Double> SPECIES_256
DoubleVector с VectorShape.S_256_BIT.SPECIES_512
public static final VectorSpecies<Double> SPECIES_512
DoubleVector с VectorShape.S_512_BIT.SPECIES_MAX
public static final VectorSpecies<Double> SPECIES_MAX
DoubleVector с VectorShape.S_Max_BIT.SPECIES_PREFERRED
public static final VectorSpecies<Double> SPECIES_PREFERRED
DoubleVector. Предпочтительный вид — это вид с максимальным размером в битах для данной платформы.Подробное описание методов
zero
public static DoubleVector zero(VectorSpecies<Double> species)
- Параметры:
-
species— вид требуемого нулевого вектора - Возвращает:
- нулевой вектор
broadcast
public abstract DoubleVector broadcast(double e)
e. Содержимое текущего вектора отбрасывается; для этой операции важен только его вид. Этот метод возвращает значение следующего выражения: DoubleVector.broadcast(this.species(), e).
- Примечание к API:
- В отличие от похожего метода с именем
broadcast()в суперклассеVector, этому методу не нужно проверять аргумент, и он не может выброситьIllegalArgumentException. Поэтому этот метод предпочтительнее метода суперкласса. - Параметры:
-
e— значение для широковещательной передачи - Возвращает:
- вектор, у которого все элементы полос установлены в примитивное значение
e - См. также:
broadcast
public static DoubleVector broadcast(VectorSpecies<Double> species, double e)
e.- Параметры:
-
species— вид требуемого вектора -
e— значение для широковещательной передачи - Возвращает:
- вектор, у которого все элементы полос установлены в примитивное значение
e - См. также:
broadcast
public abstract DoubleVector broadcast(long e)
e. Содержимое текущего вектора отбрасывается; для этой операции важен только его вид. Этот метод возвращает значение следующего выражения: EVector.broadcast(this.species(), (ETYPE)e), где EVector — класс вектора, соответствующий типу элементов этого вектора ETYPE.
Значение long e должно точно представляться типом ETYPE данного вида вектора, то есть должно выполняться условие e==(long)(ETYPE)e. Если это правило нарушено, проблема не обнаруживается статически, но во время выполнения выбрасывается IllegalArgumentException. Таким образом, этот метод несколько ослабляет статическую проверку типов для константных выражений и других скалярных значений, но компенсирует это повышением выразительности универсального API. Обратите внимание: значение e в диапазоне [-128..127] всегда допустимо, поскольку любой ETYPE принимает любое значение byte.
- Определено в:
-
broadcastв классеVector<Double> - Примечание к API:
- При работе с подтипами векторов, такими как
DoubleVector, обычно выбирается метод со строгой типизацией. Его можно выбрать явно с помощью приведения типа:v.broadcast((double)e). Оба выражения дают численно идентичные результаты. - Параметры:
-
e— значение для широковещательной передачи - Возвращает:
- вектор, у которого все элементы полос установлены в примитивное значение
e - См. также:
broadcast
public static DoubleVector broadcast(VectorSpecies<Double> species, long e)
e. Значение long должно точно представляться типом ETYPE данного вида вектора, то есть должно выполняться условие e==(long)(ETYPE)e.- Параметры:
-
species— вид требуемого вектора -
e— значение для широковещательной передачи - Возвращает:
- вектор, у которого все элементы полос установлены в примитивное значение
e - Выбрасывает:
-
IllegalArgumentException— если заданное значениеlongневозможно представить типомETYPEвектора - См. также:
lanewise
public abstract DoubleVector lanewise(VectorOperators.Unary op)
lanewise
public abstract DoubleVector lanewise(VectorOperators.Unary op, VectorMask<Double> m)
lanewise
public abstract DoubleVector lanewise(VectorOperators.Binary op, Vector<Double> v)
lanewise
public abstract DoubleVector lanewise(VectorOperators.Binary op, Vector<Double> v, VectorMask<Double> m)
lanewise
public final DoubleVector lanewise(VectorOperators.Binary op, double e)
this.lanewise(op, this.broadcast(e)).- Параметры:
-
op— операция для обработки значений полос -
e— входной скаляр - Возвращает:
- результат поэлементного применения операции к двум входным векторам
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Binary op, double e, VectorMask<Double> m)
this.lanewise(op, this.broadcast(e), m).- Параметры:
-
op— операция для обработки значений полос -
e— входной скаляр -
m— маска, управляющая выбором полос - Возвращает:
- результат поэлементного применения операции к входному вектору и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Binary op, long e)
this.lanewise(op, this.broadcast(e)). - Определено в:
-
lanewiseв классеVector<Double> - Примечание к API:
- При работе с подтипами векторов, такими как
DoubleVector, обычно выбирается метод со строгой типизацией. Его можно выбрать явно с помощью приведения типа:v.lanewise(op,(double)e). Оба выражения дают численно идентичные результаты. - Параметры:
-
op— операция для объединения значений полос -
e— входной скаляр - Возвращает:
- результат поэлементного применения операции к входному вектору и скаляру
- См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Binary op, long e, VectorMask<Double> m)
this.lanewise(op, this.broadcast(e), m). - Определено в:
-
lanewiseв классеVector<Double> - Примечание к API:
- При работе с подтипами векторов, такими как
DoubleVector, обычно выбирается метод со строгой типизацией. Его можно выбрать явно с помощью приведения типа:v.lanewise(op,(double)e,m). Оба выражения дают численно идентичные результаты. - Параметры:
-
op— операция для объединения значений полос -
e— входной скаляр -
m— маска, управляющая выбором полос - Возвращает:
- результат поэлементного применения операции к входному вектору и скаляру
- См. также:
lanewise
public abstract DoubleVector lanewise(VectorOperators.Ternary op, Vector<Double> v1, Vector<Double> v2)
lanewise
public abstract DoubleVector lanewise(VectorOperators.Ternary op, Vector<Double> v1, Vector<Double> v2, VectorMask<Double> m)
lanewise
public final DoubleVector lanewise(VectorOperators.Ternary op, double e1, double e2)
this.lanewise(op, this.broadcast(e1), this.broadcast(e2)).- Параметры:
-
op— операция для объединения значений полос -
e1— первый входной скаляр -
e2— второй входной скаляр - Возвращает:
- результат поэлементного применения операции к входному вектору и скалярам
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Ternary op, double e1, double e2, VectorMask<Double> m)
this.lanewise(op, this.broadcast(e1), this.broadcast(e2), m).- Параметры:
-
op— операция для объединения значений полос -
e1— первый входной скаляр -
e2— второй входной скаляр -
m— маска, управляющая выбором полос - Возвращает:
- результат поэлементного применения операции к входному вектору и скалярам
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Ternary op, Vector<Double> v1, double e2)
this.lanewise(op, v1, this.broadcast(e2)).- Параметры:
-
op— операция для объединения значений полос -
v1— другой входной вектор -
e2— входной скаляр - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Ternary op, Vector<Double> v1, double e2, VectorMask<Double> m)
this.lanewise(op, v1, this.broadcast(e2), m).- Параметры:
-
op— операция для объединения значений полос -
v1— другой входной вектор -
e2— входной скаляр -
m— маска, управляющая выбором полос - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Ternary op, double e1, Vector<Double> v2)
this.lanewise(op, this.broadcast(e1), v2).- Параметры:
-
op— операция для объединения значений полос -
e1— входной скаляр -
v2— другой входной вектор - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
lanewise
public final DoubleVector lanewise(VectorOperators.Ternary op, double e1, Vector<Double> v2, VectorMask<Double> m)
this.lanewise(op, this.broadcast(e1), v2, m).- Параметры:
-
op— операция для объединения значений полос -
e1— входной скаляр -
v2— другой входной вектор -
m— маска, управляющая выбором полос - Возвращает:
- результат поэлементного применения операции к входным векторам и скаляру
- Выбрасывает:
-
UnsupportedOperationException— если этот вектор не поддерживает запрошенную операцию - См. также:
add
public final DoubleVector add(Vector<Double> v)
+) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(ADD, v). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
add
public final DoubleVector add(double e)
+) к каждому элементу. Этот метод также эквивалентен выражению lanewise(ADD, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат сложения каждого элемента этого вектора со скалярным значением
- См. также:
add
public final DoubleVector add(Vector<Double> v, VectorMask<Double> m)
+) к каждой паре соответствующих значений элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(ADD, v, m). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
add
public final DoubleVector add(double e, VectorMask<Double> m)
+) к каждому элементу. Этот метод также эквивалентен выражению lanewise(ADD, s, m).- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат сложения каждого элемента этого вектора со скалярным значением
- См. также:
sub
public final DoubleVector sub(Vector<Double> v)
-) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(SUB, v). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
sub
public final DoubleVector sub(double e)
-) к каждому элементу. Этот метод также эквивалентен выражению lanewise(SUB, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат вычитания скалярного значения из каждого элемента этого вектора
- См. также:
sub
public final DoubleVector sub(Vector<Double> v, VectorMask<Double> m)
-) к каждой паре соответствующих значений элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(SUB, v, m). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
sub
public final DoubleVector sub(double e, VectorMask<Double> m)
-) к каждому элементу. Этот метод также эквивалентен выражению lanewise(SUB, s, m).- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат вычитания скалярного значения из каждого элемента этого вектора
- См. также:
mul
public final DoubleVector mul(Vector<Double> v)
*) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(MUL, v). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
mul
public final DoubleVector mul(double e)
*) к каждому элементу. Этот метод также эквивалентен выражению lanewise(MUL, e).- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат умножения этого вектора на указанное скалярное значение
- См. также:
mul
public final DoubleVector mul(Vector<Double> v, VectorMask<Double> m)
*) к каждой паре соответствующих значений элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(MUL, v, m). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
mul
public final DoubleVector mul(double e, VectorMask<Double> m)
*) к каждому элементу. Этот метод также эквивалентен выражению lanewise(MUL, s, m).- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат умножения каждого элемента этого вектора на скалярное значение
- См. также:
div
public final DoubleVector div(Vector<Double> v)
/) к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(DIV, v). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
- Определено в:
-
divв классеVector<Double> - Примечание API:
- Поскольку в основе лежит скалярный оператор для чисел с плавающей точкой IEEE, деление на ноль не приводит к исключению, а возвращает бесконечность со знаком или NaN.
- Параметры:
-
v— второй входной вектор - Возвращает:
- результат деления этого вектора на второй входной вектор
- См. также:
div
public final DoubleVector div(double e)
/) к каждому элементу. Этот метод также эквивалентен выражению lanewise(DIV, e).- Примечание API:
- Поскольку в основе лежит скалярный оператор для чисел с плавающей точкой IEEE, деление на ноль не приводит к исключению, а возвращает бесконечность со знаком или NaN.
- Параметры:
-
e— входное скалярное значение - Возвращает:
- результат деления каждого элемента этого вектора на скалярное значение
- См. также:
div
public final DoubleVector div(Vector<Double> v, VectorMask<Double> m)
/) к каждой паре соответствующих значений элементов. Для любого элемента, не выбранного маской, примитивная операция не выполняется, и в этом векторе сохраняется исходное значение этого элемента. Этот метод также эквивалентен выражению lanewise(DIV, v, m). Как полноценная именованная операция, этот метод имеет перегрузки с маской и без неё, а в подклассах также — перегрузки с широковещательной передачей скалярного значения (с маской и без неё).
- Определено в:
-
divв классеVector<Double> - Примечание API:
- Поскольку в основе лежит скалярный оператор для чисел с плавающей точкой IEEE, деление на ноль не приводит к исключению, а возвращает бесконечность со знаком или NaN.
- Параметры:
-
v— второй входной вектор -
m— маска, управляющая выбором элементов - Возвращает:
- результат деления этого вектора на второй входной вектор
- См. также:
div
public final DoubleVector div(double e, VectorMask<Double> m)
/) к каждому элементу. Этот метод также эквивалентен выражению lanewise(DIV, s, m).- Примечание API:
- Поскольку в основе лежит скалярный оператор для чисел с плавающей точкой IEEE, деление на ноль не приводит к исключению, а возвращает бесконечность со знаком или NaN.
- Параметры:
-
e— входное скалярное значение -
m— маска, управляющая выбором элементов - Возвращает:
- результат деления каждого элемента этого вектора на скалярное значение
- См. также:
min
public final DoubleVector min(Vector<Double> v)
Math.min() к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(MIN, v). - Определено в:
-
minв классеVector<Double> - Примечание API:
- В этом методе отрицательный ноль с плавающей точкой
-0.0считается значением, отличным от значения по умолчанию (положительного нуля) и меньшим него. - Параметры:
-
v— второй входной вектор - Возвращает:
- поэлементный минимум этого вектора и второго входного вектора
- См. также:
min
public final DoubleVector min(double e)
Math.min() к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(MIN, e).- Примечание API:
- В этом методе отрицательный ноль с плавающей точкой
-0.0считается значением, отличным от значения по умолчанию (положительного нуля) и меньшим него. - Параметры:
-
e— входное скалярное значение - Возвращает:
- результат умножения этого вектора на указанное скалярное значение
- См. также:
max
public final DoubleVector max(Vector<Double> v)
Math.max() к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(MAX, v). Это не полноценная именованная операция, подобная add(). Версия этой операции с маской напрямую не предоставляется, но её можно получить с помощью версии lanewise с маской. Подклассы определяют дополнительную перегрузку этого метода с широковещательной передачей скалярного значения.
- Определено в:
-
maxв классеVector<Double> - Примечание API:
- В этом методе отрицательный ноль с плавающей точкой
-0.0считается значением, отличным от значения по умолчанию (положительного нуля) и меньшим него. - Параметры:
-
v— второй входной вектор - Возвращает:
- поэлементный максимум этого вектора и второго входного вектора
- См. также:
max
public final DoubleVector max(double e)
Math.max() к каждой паре соответствующих значений элементов. Этот метод также эквивалентен выражению lanewise(MAX, e).- Примечание API:
- В этом методе отрицательный ноль с плавающей точкой
-0.0считается значением, отличным от значения по умолчанию (положительного нуля) и меньшим него. - Параметры:
-
e— входное скалярное значение - Возвращает:
- результат умножения этого вектора на указанное скалярное значение
- См. также:
pow
public final DoubleVector pow(Vector<Double> b)
Math.pow(a,b). Этот метод также эквивалентен выражению lanewise(POW, b). Это не полноценная именованная операция, подобная add. Версия этой операции с маской напрямую недоступна, но её можно получить с помощью версии lanewise с маской.
- Параметры:
-
b— вектор показателей степени, в которую возводится этот вектор - Возвращает:
- этот вектор, возведённый в степень
b - См. также:
pow
public final DoubleVector pow(double b)
Math.pow(a,b). Этот метод также эквивалентен выражению lanewise(POW, b).- Параметры:
-
b— скалярный показатель степени, в которую возводится этот вектор - Возвращает:
- этот вектор, возведённый в степень
b - См. также:
neg
abs
sqrt
public final DoubleVector sqrt()
Math.sqrt(a). Этот метод также эквивалентен выражению lanewise(SQRT).- Возвращает:
- квадратный корень этого вектора
- См. также:
eq
public final VectorMask<Double> eq(Vector<Double> v)
==). Результат совпадает с compare(VectorOperators.EQ, v). eq
public final VectorMask<Double> eq(double e)
==). Результат совпадает с compare(VectorOperators.Comparison.EQ, e).- Параметры:
-
e— входной скаляр - Возвращает:
- результат в виде маски проверки равенства этого вектора
e - См. также:
lt
public final VectorMask<Double> lt(Vector<Double> v)
<). Результат совпадает с compare(VectorOperators.LT, v). lt
public final VectorMask<Double> lt(double e)
<). Результат совпадает с compare(VectorOperators.LT, e).- Параметры:
-
e— входной скаляр - Возвращает:
- результат в виде маски проверки того, меньше ли этот вектор входного скаляра
- См. также:
test
public abstract VectorMask<Double> test(VectorOperators.Test op)
test
public abstract VectorMask<Double> test(VectorOperators.Test op, VectorMask<Double> m)
test(op).and(m). - Определено в:
-
testв классеVector<Double> - Параметры:
-
op— операция, используемая для проверки значений дорожек -
m— маска, управляющая выбором дорожек - Возвращает:
- результат в виде маски проверки дорожек этого вектора в соответствии с выбранным оператором проверки и только на дорожках, выбранных маской
- См. также:
compare
public abstract VectorMask<Double> compare(VectorOperators.Comparison op, Vector<Double> v)
- Определено в:
-
compareв классеVector<Double> - Параметры:
-
op— операция, используемая для сравнения значений дорожек -
v— второй входной вектор - Возвращает:
- результат в виде маски проверки по каждой дорожке того, удовлетворяет ли сравнение этого вектора с входным вектором выбранному оператору сравнения
- См. также:
compare
public abstract VectorMask<Double> compare(VectorOperators.Comparison op, double e)
Результат совпадает с compare(op, broadcast(species(), e)). То есть скаляр можно считать разосланным по вектору того же вида, после чего этот вектор сравнивается с исходным с использованием выбранной операции сравнения.
- Параметры:
-
op— операция, используемая для сравнения значений дорожек -
e— входной скаляр - Возвращает:
- результат в виде маски проверки по каждой дорожке того, удовлетворяет ли сравнение этого вектора с входным скаляром выбранному оператору сравнения
- См. также:
compare
public final VectorMask<Double> compare(VectorOperators.Comparison op, double e, VectorMask<Double> m)
compare(op,s).and(m).- Параметры:
-
op— операция, используемая для сравнения значений дорожек -
e— входной скаляр -
m— маска, управляющая выбором дорожек - Возвращает:
- результат в виде маски проверки по каждой дорожке того, удовлетворяет ли сравнение этого вектора с входным скаляром выбранному оператору сравнения, и только на дорожках, выбранных маской
- См. также:
compare
public abstract VectorMask<Double> compare(VectorOperators.Comparison op, long e)
Результат совпадает с this.compare(op, this.broadcast(e)). То есть скаляр можно считать разосланным по вектору того же вида, после чего этот вектор сравнивается с исходным с использованием выбранной операции сравнения.
- Определено в:
-
compareв классеVector<Double> - Параметры:
-
op— операция, используемая для сравнения значений дорожек -
e— входной скаляр - Возвращает:
- результат в виде маски проверки по каждой дорожке того, удовлетворяет ли сравнение этого вектора с входным скаляром выбранному оператору сравнения
- См. также:
compare
public final VectorMask<Double> compare(VectorOperators.Comparison op, long e, VectorMask<Double> m)
compare(op,e).and(m). - Определено в:
-
compareв классеVector<Double> - Параметры:
-
op— операция, используемая для сравнения значений дорожек -
e— входной скаляр -
m— маска, управляющая выбором дорожек - Возвращает:
- результат в виде маски проверки по каждой дорожке того, удовлетворяет ли сравнение этого вектора с входным скаляром выбранному оператору сравнения, и только на дорожках, выбранных маской
- См. также:
blend
public abstract DoubleVector blend(Vector<Double> v, VectorMask<Double> m)
- Для каждой дорожки, установленной в маске, новое значение берётся из второго входного вектора и заменяет прежнее значение этой дорожки в данном векторе.
- Для каждой дорожки, сброшенной в маске, замена не выполняется, и вектор сохраняет исходное значение этой дорожки.
Vector<E> a = ...;
VectorSpecies<E> species = a.species();
Vector<E> b = ...;
b.check(species);
VectorMask<E> m = ...;
ETYPE[] ar = a.toArray();
for (int i = 0; i < ar.length; i++) {
if (m.laneIsSet(i)) {
ar[i] = b.lane(i);
}
}
return EVector.fromArray(s, ar, 0);
addIndex
public abstract DoubleVector addIndex(int scale)
N вычисляет масштабированное значение индекса N*scale и прибавляет его к значению, уже находящемуся в дорожке N текущего вектора. Масштаб не должен быть настолько большим, а размер элемента — настолько малым, чтобы при вычислении любого из значений N*scale или VLENGTH*scale возникало переполнение, если результат представлен типом дорожек вектора ETYPE.
Следующий псевдокод иллюстрирует это поведение:
Vector<E> a = ...;
VectorSpecies<E> species = a.species();
ETYPE[] ar = a.toArray();
for (int i = 0; i < ar.length; i++) {
long d = (long)i * scale;
if (d != (ETYPE) d) throw ...;
ar[i] += (ETYPE) d;
}
long d = (long)ar.length * scale;
if (d != (ETYPE) d) throw ...;
return EVector.fromArray(s, ar, 0);
blend
public final DoubleVector blend(double e, VectorMask<Double> m)
blend(broadcast(e),m).- Параметры:
-
e— входной скаляр, содержащий значение для замены дорожек -
m— маска, управляющая выбором скаляра для дорожек - Возвращает:
- результат объединения элементов дорожек этого вектора со скалярным значением
blend
public final DoubleVector blend(long e, VectorMask<Double> m)
blend(broadcast(e),m).slice
public abstract DoubleVector slice(int origin, Vector<Double> v1)
origin в текущем векторе и продолжая (при необходимости) в непосредственно следующем векторе. Блок из VLENGTH дорожек извлекается в отдельный вектор и возвращается. Это междорожечная операция, сдвигающая элементы дорожек к началу из текущего и второго векторов. Оба вектора можно рассматривать как единый «фон» длиной 2*VLENGTH, из которого извлекается срез. Дорожка с номером N в выходном векторе копируется из дорожки origin+N входного вектора, если такая дорожка существует, иначе — из дорожки origin+N-VLENGTH второго вектора (которая гарантированно существует).
Значение origin должно находиться в включительном диапазоне 0..VLENGTH. В предельных случаях v.slice(0,w) и v.slice(VLENGTH,w) возвращают соответственно v и w.
- Параметры:
-
origin— первая входная дорожка, переносимая в срез -
v1— второй вектор, логически присоединяемый к первому перед извлечением среза (если не задан, по умолчанию равен нулю) - Возвращает:
- непрерывный срез из
VLENGTHдорожек, взятый из этого вектора начиная с указанной позиции и продолжающийся (при необходимости) во втором векторе - См. также:
slice
public final DoubleVector slice(int origin, Vector<Double> w, VectorMask<Double> m)
origin в текущем векторе и продолжая (при необходимости) в непосредственно следующем векторе. Блок из VLENGTH дорожек извлекается в отдельный вектор и возвращается. Во всех дорожках, сброшенных в заданной маске, результирующий вектор будет содержать нули. В дорожках, установленных в маске, будут данные, скопированные из выбранных дорожек this или v1. Это междорожечная операция, сдвигающая элементы дорожек к началу из текущего и второго векторов. Оба вектора можно рассматривать как единый «фон» длиной 2*VLENGTH, из которого извлекается срез. Возвращаемый результат равен выражению broadcast(0).blend(slice(origin,v1),m).
- Определено в:
-
sliceв классеVector<Double> - Параметры:
-
origin— первая входная дорожка, переносимая в срез -
w— второй вектор, логически присоединяемый к первому перед извлечением среза (если не задан, по умолчанию равен нулю) -
m— маска, управляющая выбором дорожек в результирующий вектор - Возвращает:
- непрерывный срез из
VLENGTHдорожек, взятый из этого вектора начиная с указанной позиции и продолжающийся (при необходимости) во втором векторе - См. также:
slice
public abstract DoubleVector slice(int origin)
origin в текущем векторе. Блок из VLENGTH дорожек, при необходимости дополненный нулевыми дорожками, извлекается в отдельный вектор и возвращается. Это вспомогательный метод, который извлекает срез из одного вектора на расширенном фоне из нулевых дорожек. Он эквивалентен slice
(origin, broadcast(0)). Его также можно рассматривать просто как междорожечный сдвиг от более поздних дорожек к более ранним с заполнением освободившихся дорожек в конце вектора нулями. В этом случае величина сдвига равна origin. - Параметры:
-
origin— первая входная дорожка, переносимая в срез - Возвращает:
- последние
VLENGTH-originвходных дорожек, помещённые начиная с первой дорожки выходного вектора и дополненные в конце нулями - См. также:
unslice
public abstract DoubleVector unslice(int origin, Vector<Double> w, int part)
slice(). Это междорожечная операция, переставляющая элементы дорожек текущего вектора в направлении конца и вставляющая их в логическую пару векторов-фонов. Однако возвращается только один из этой пары. Фон образуется дублированием второго входного вектора. (При этом выходные данные никогда не содержат двух копий одной и той же входной дорожки.) Дорожка с номером N во входном векторе копируется в дорожку origin+N первого вектора-фона, если такая дорожка существует, иначе — в дорожку origin+N-VLENGTH второго вектора-фона (которая гарантированно существует). Возвращается первый или второй вектор-фон с вставленным срезом. Число part, равное нулю или единице, выбирает первый или второй обновлённый вектор-фон.
Значение origin должно находиться в включительном диапазоне 0..VLENGTH. В предельных случаях v.unslice(0,w,0) и v.unslice(VLENGTH,w,1) возвращают v, а v.unslice(0,w,1) и v.unslice(VLENGTH,w,0) возвращают w.
- Определено в:
-
unsliceв классеVector<Double> - Параметры:
-
origin— первая выходная дорожка, в которую вставляется срез -
w— вектор-фон, в который будет вставлен срез (в виде двух копий) -
part— номер части результата (ноль или единица) - Возвращает:
- первую или вторую часть пары векторов-фонов
w, обновлённую вставкой этого вектора начиная с указанной позиции - См. также:
unslice
public abstract DoubleVector unslice(int origin, Vector<Double> w, int part, VectorMask<Double> m)
slice(). Это межполосная операция, которая переставляет элементы полос текущего вектора в прямом направлении и вставляет его полосы (если они выбраны маской) в логическую пару фоновых векторов. Как и в версии этого метода без маски, возвращается только один из пары векторов, выбранный числом part. Для каждой полосы N, выбранной маской, значение полосы копируется в полосу origin+N первого фонового вектора, если такая полоса существует, иначе — в полосу origin+N-VLENGTH второго фонового вектора (наличие которого гарантировано). Значения фоновых полос сохраняются, если соответствующие входные полосы N не выбраны маской. Возвращается первый или второй фоновый вектор, обновлённый значениями выбранных полос вставленного среза. Число part, равное нулю или единице, выбирает первый или второй обновлённый фоновый вектор.
- Определён в:
-
unsliceв классеVector<Double> - Параметры:
-
origin- первая выходная полоса, в которую следует поместить срез -
w- фоновый вектор, который (в виде двух копий) примет вставленный срез, если соответствующие полосы выбраны вm -
part- номер части результата (ноль или единица) -
m- маска, управляющая выбором полос из текущего вектора - Возвращает:
- первую или вторую часть пары фоновых векторов
w, обновлённую вставкой выбранных полос этого вектора с указанного начального индекса - См. также:
unslice
public abstract DoubleVector unslice(int origin)
unslice(), этот метод возвращает только первый вектор из пары фоновых векторов. Это вспомогательный метод, возвращающий результат unslice
(origin, broadcast(0), 0). Его также можно рассматривать просто как межполосный сдвиг от более ранних полос к более поздним, при котором освободившиеся полосы в начале вектора заполняются нулями. В таком представлении величина сдвига равна origin. rearrange
public abstract DoubleVector rearrange(VectorShuffle<Double> shuffle)
N перестановки и каждого индекса исходной полосы I=s.wrapIndex(s.laneSource(N)) в перестановке выходная полоса N получает значение из входного вектора в полосе I. rearrange
public abstract DoubleVector rearrange(VectorShuffle<Double> s, VectorMask<Double> m)
N перестановки и каждого индекса исходной полосы I=s.wrapIndex(s.laneSource(N)) в перестановке выходная полоса N получает значение из входного вектора в полосе I, если соответствующая полоса выбрана маской. В противном случае выходной полосе N присваивается ноль. Этот метод возвращает значение, полученное в результате выполнения следующего псевдокода:
Vector<E> r = this.rearrange(s);
return broadcast(0).blend(r, m);
rearrange
public abstract DoubleVector rearrange(VectorShuffle<Double> s, Vector<Double> v)
v). Для каждой полосы N перестановки и каждого индекса исходной полосы I=s.laneSource(N) в перестановке выходная полоса N получает значение из первого вектора в полосе I, если выполняется условие I>=0. В противном случае специальный индекс I циклически преобразуется прибавлением к нему VLENGTH и используется для индексирования второго вектора в позиции I+VLENGTH. Этот метод возвращает значение, полученное в результате выполнения следующего псевдокода:
Vector<E> r1 = this.rearrange(s.wrapIndexes());
// or else: r1 = this.rearrange(s, s.laneIsValid());
Vector<E> r2 = v.rearrange(s.wrapIndexes());
return r2.blend(r1,s.laneIsValid());
compress
public abstract DoubleVector compress(VectorMask<Double> m)
N маски, если маска для полосы N установлена, элемент входного вектора в полосе N выбирается и помещается в выходной вектор подряд, начиная с полосы 0. Все оставшиеся верхние полосы выходного вектора, если они есть, устанавливаются в ноль. expand
public abstract DoubleVector expand(VectorMask<Double> m)
N маски, если маска для полосы N установлена, следующий последовательный элемент входного вектора, начиная с полосы 0, выбирается и помещается в выходной вектор в полосу N. Все оставшиеся полосы выходного вектора, если они есть, устанавливаются в ноль. selectFrom
public abstract DoubleVector selectFrom(Vector<Double> v)
v, используя значения индексов, хранящиеся в полосах этого вектора. Таким образом, второй вектор служит таблицей, элементы которой выбираются по индексам текущего вектора. Это межполосная операция, переставляющая элементы полос вектора-аргумента под управлением этого вектора. Для каждой полосы N этого вектора и каждого значения полосы I=wrapIndex(this.lane(N)) в нём выходная полоса N получает значение из вектора-аргумента в полосе I. Таким образом, результат содержит только значения, хранящиеся в векторе-аргументе v, но расположенные в порядке, зависящем от значений индексов в this. Результат совпадает с выражением v.rearrange(this.toShuffle()). - Определён в:
-
selectFromв классеVector<Double> - Параметры:
-
v- вектор, предоставляющий значения результата - Возвращает:
- результат перестановки элементов полос вектора
v - См. также:
selectFrom
public abstract DoubleVector selectFrom(Vector<Double> s, VectorMask<Double> m)
v, используя значения индексов, хранящиеся в полосах этого вектора. Таким образом, второй вектор служит таблицей, элементы которой выбираются по индексам текущего вектора. Полосы, не выбранные маской, получают ноль, а не значение из таблицы. Это межполосная операция, переставляющая элементы полос вектора-аргумента под управлением этого вектора и маски. Результат совпадает с выражением v.rearrange(this.toShuffle(), m). - Определён в:
-
selectFromв классеVector<Double> - Параметры:
-
s- вектор, предоставляющий значения результата -
m- маска, управляющая выбором изv - Возвращает:
- результат перестановки элементов полос вектора
v - См. также:
selectFrom
public abstract DoubleVector selectFrom(Vector<Double> v1, Vector<Double> v2)
v1 и третьего вектора v2, используя значения, хранящиеся в полосах этого вектора. Таким образом, второй и третий векторы служат таблицей, элементы которой выбираются по индексам этого вектора. Это межполосная операция, переставляющая элементы полос векторов-аргументов под управлением этого вектора. Для каждой полосы N этого вектора и каждого значения полосы I=wrapIndex(this.lane(N) в нём выходная полоса N получает значение из второго вектора в полосе I, если выполняется условие I < VLENGTH. В противном случае выходная полоса N получает значение из третьего вектора в полосе I - VLENGTH. Здесь VLENGTH — это результат this.length(), а для целочисленных значений wrapIndex вычисляет результат Math.floorMod(E, 2 * VLENGTH), где E — индекс, который нужно циклически преобразовать. Если VLENGTH является степенью двойки, результат также равен E & (2 * VLENGTH - 1). Для значений с плавающей запятой wrapIndex вычисляет Math.floorMod(convert(E), 2 * VLENGTH), где convert преобразует значение с плавающей запятой в целочисленное значение с тем же количеством разрядов представления — как при преобразовании значения типа double в значение типа long ((long)doubleVal) или значения типа float в значение типа int ((int)floatVal). Таким образом, результат содержит только значения, хранящиеся в векторах-аргументах v1 и v2, но расположенные в порядке, зависящем от значений индексов в this. Для целочисленных значений результат совпадает с выражением v1.rearrange(
this.lanewise(VectorOperators.AND, 2 * VLENGTH - 1).toShuffle(),
v2)
VLENGTH является степенью двойки. Поэлементная операция AND возвращает вектор, элементы которого находятся в диапазоне [0, 2 * VLENGTH - 1]). Преобразование в перестановку создаёт частично циклически преобразованную перестановку, индексы которой находятся в диапазоне [-VLENGTH, VLENGTH - 1]); специальные индексы используются для выбора элементов третьего вектора. - Определён в:
-
selectFromв классеVector<Double> - Параметры:
-
v1- первый входной вектор -
v2- второй входной вектор - Возвращает:
- результат перестановки элементов полос векторов
v1иv2 - См. также:
fma
public final DoubleVector fma(Vector<Double> b, Vector<Double> c)
this.mul(b).add(c) и обычно ближе к точному математическому результату. Это поэлементная тернарная операция, которая применяет к каждой полосе операцию, соответствующую спецификации Math.fma(a,b,c). Этот метод также эквивалентен выражению lanewise(FMA, b, c).- Параметры:
-
b- второй входной вектор, содержащий значения множителей -
c- третий входной вектор, содержащий значения слагаемых - Возвращает:
- произведение этого вектора и второго входного вектора, сложенное с третьим входным вектором; для промежуточного результата используется расширенная точность
- См. также:
fma
public final DoubleVector fma(double b, double c)
this.mul(b).add(c) и обычно ближе к точному математическому результату. Это поэлементная тернарная операция, которая применяет к каждой полосе операцию, соответствующую спецификации Math.fma(a,b,c). Этот метод также эквивалентен выражению lanewise(FMA, b, c).- Параметры:
-
b- скалярный множитель -
c- скалярное слагаемое - Возвращает:
- произведение этого вектора и скалярного множителя, сложенное со скалярным слагаемым; для промежуточного результата используется расширенная точность
- См. также:
reduceLanes
public abstract double reduceLanes(VectorOperators.Associative op)
Некоторые операции редукции не допускают произвольной перестановки операндов, но включены сюда благодаря своей полезности.
- В случае
FIRST_NONZEROредукция возвращает значение из полосы с наименьшим номером, отличное от нуля. (Как и в случаеMAXиMIN, отрицательный ноль с плавающей запятой-0.0считается значением, отличным от значения по умолчанию — положительного нуля. Поэтому редукция по первому ненулевому элементу может вернуть-0.0даже при наличии ненулевых значений в полосах.) - В случае
ADDиMULточный результат зависит от произвольного порядка выполнения операций, который может меняться со временем. Дополнительные сведения см. в разделе Операции над векторами с плавающей запятой. - Все остальные операции редукции полностью коммутативны и ассоциативны. Реализация может выбрать любой порядок обработки, но результат всегда будет одинаковым.
- Параметры:
-
op- операция, используемая для объединения значений полос - Возвращает:
- накопленный результат
- Исключения:
-
UnsupportedOperationException- если этот вектор не поддерживает запрошенную операцию - См. также:
reduceLanes
public abstract double reduceLanes(VectorOperators.Associative op, VectorMask<Double> m)
Если не выбрано ни одного элемента, возвращается зависящее от операции нейтральное значение.
- Если операция —
ADDилиFIRST_NONZERO, нейтральным значением является положительный ноль, значениеdoubleпо умолчанию. - Если операция —
MUL, нейтральным значением является единица. - Если операция —
MAX, нейтральным значением являетсяDouble.NEGATIVE_INFINITY. - Если операция —
MIN, нейтральным значением являетсяDouble.POSITIVE_INFINITY.
Некоторые операции редукции не допускают произвольной перестановки операндов, но включены сюда благодаря своей полезности.
- В случае
FIRST_NONZEROредукция возвращает значение из полосы с наименьшим номером, отличное от нуля. (Как и в случаеMAXиMIN, отрицательный ноль с плавающей запятой-0.0считается значением, отличным от значения по умолчанию — положительного нуля. Поэтому редукция по первому ненулевому элементу может вернуть-0.0даже при наличии ненулевых значений в полосах.) - В случае
ADDиMULточный результат зависит от произвольного порядка выполнения операций, который может меняться со временем. Дополнительные сведения см. в разделе Операции над векторами с плавающей запятой. - Все остальные операции редукции полностью коммутативны и ассоциативны. Реализация может выбрать любой порядок обработки, но результат всегда будет одинаковым.
- Параметры:
-
op- операция, используемая для объединения значений полос -
m- маска, управляющая выбором полос - Возвращает:
- результат редукции, накопленный из значений выбранных полос
- Исключения:
-
UnsupportedOperationException- если этот вектор не поддерживает запрошенную операцию - См. также:
lane
public abstract double lane(int i)
i
- Параметры:
-
i- индекс полосы - Возвращает:
- элемент полосы с индексом
i - Исключения:
-
IllegalArgumentException- если индекс находится вне допустимого диапазона (< 0 || >= length())
withLane
public abstract DoubleVector withLane(int i, double e)
i значением e. Это межполосная операция, которая действует так, как если бы возвращала результат смешивания этого вектора с входным вектором, полученным широковещательной передачей e, и маской, в которой установлена только одна полоса с индексом i.- Параметры:
-
i- индекс полосы, элемент которой нужно заменить -
e- помещаемое значение - Возвращает:
- результат замены элемента полосы этого вектора с индексом
iзначениемe. - Исключения:
-
IllegalArgumentException- если индекс находится вне допустимого диапазона (< 0 || >= length())
toArray
public final double[] toArray()
double[], содержащий значения всех полос. Длина массива совпадает с длиной вектора. Элементы массива располагаются в порядке полос. Этот метод действует так, как если бы он сохранял этот вектор в выделенный массив (используя intoArray) и возвращал массив следующим образом:
double[] a = new double[this.length()];
this.intoArray(a, 0);
return a;
toIntArray
public final int[] toIntArray()
int[], содержащий значения всех полос, преобразованные к типу int. Длина массива совпадает с длиной вектора. Элементы массива преобразуются так, как если бы выполнялось приведение типов, и сохраняются в порядке полос. Эта операция может завершиться ошибкой, если тип элементов вектора —
float или double, а полосы содержат дробные значения или значения вне допустимого диапазона. Если какое-либо значение полосы вектора нельзя представить как int, выбрасывается исключение. - Определён в:
-
toIntArrayв классеVector<Double> - Возвращает:
- массив
int[], содержащий значения полос этого вектора - См. также:
toLongArray
public final long[] toLongArray()
long[], содержащий значения всех полос, преобразованные к типу long. Длина массива совпадает с длиной вектора. Элементы массива преобразуются так, как если бы выполнялось приведение типов, и сохраняются в порядке полос. Эта операция может завершиться ошибкой, если тип элементов вектора —
float или double, а полосы содержат дробные значения или значения вне допустимого диапазона. Если какое-либо значение полосы вектора нельзя представить как long, выбрасывается исключение. - Определён в:
-
toLongArrayв классеVector<Double> - Возвращает:
- массив
long[], содержащий значения полос этого вектора - См. также:
toDoubleArray
public final double[] toDoubleArray()
double[], содержащий значения всех элементов вектора, преобразованные к типу double. Длина массива совпадает с длиной вектора. Элементы массива преобразуются так, как если бы они были приведены к типу, и сохраняются в порядке элементов вектора. Эта операция может привести к потере точности, если тип элементов вектора — long. - Определено в:
-
toDoubleArrayв классеVector<Double> - Примечание по реализации:
- Это псевдоним для
toArray(). При использовании этого метода для векторов типаDoubleVectorточность не теряется. - Возвращает:
- массив
double[], содержащий значения элементов этого вектора, которые могут быть округлены до представимых значенийdouble - См. также:
fromArray
public static DoubleVector fromArray(VectorSpecies<Double> species, double[] a, int offset)
double[], начиная с указанного смещения. Для каждого элемента вектора, где N — индекс элемента вектора, элемент массива с индексом offset + N помещается в результирующий вектор в позицию N.- Параметры:
-
species— тип требуемого вектора -
a— массив -
offset— смещение в массиве - Возвращает:
- вектор, загруженный из массива
- Вызывает:
-
IndexOutOfBoundsException— еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора
fromArray
public static DoubleVector fromArray(VectorSpecies<Double> species, double[] a, int offset, VectorMask<Double> m)
double[], начиная с указанного смещения и используя маску. Элементы, для которых бит маски не установлен, заполняются значением по умолчанию для double (положительным нулём). Для каждого элемента вектора, где N — индекс элемента вектора, если бит маски с индексом N установлен, то элемент массива с индексом offset + N помещается в результирующий вектор в позицию N; в противном случае в позицию N результирующего вектора помещается значение элемента по умолчанию.- Параметры:
-
species— тип требуемого вектора -
a— массив -
offset— смещение в массиве -
m— маска, управляющая выбором элементов - Возвращает:
- вектор, загруженный из массива
- Вызывает:
-
IndexOutOfBoundsException— еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора, для которого установлен бит маски
fromArray
public static DoubleVector fromArray(VectorSpecies<Double> species, double[] a, int offset, int[] indexMap, int mapOffset)
double[], используя индексы, полученные прибавлением фиксированного offset к последовательности дополнительных смещений из карты индексов. Карта индексов представляет собой непрерывную последовательность элементов VLENGTH во втором массиве ints, начиная с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, элемент загружается из массива по индексу a[f(N)], где f(N) — выражение отображения индекса offset + indexMap[mapOffset + N]].
- Параметры:
-
species— тип требуемого вектора -
a— массив -
offset— смещение в массиве; может быть отрицательным, если относительные индексы в карте индексов компенсируют его и дают значение в пределах массива -
indexMap— карта индексов -
mapOffset— смещение в карте индексов - Возвращает:
- вектор, загруженный из индексированных элементов массива
- Вызывает:
-
IndexOutOfBoundsException— еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора - См. также:
fromArray
public static DoubleVector fromArray(VectorSpecies<Double> species, double[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Double> m)
double[] под управлением маски, используя индексы, полученные прибавлением фиксированного offset к последовательности дополнительных смещений из карты индексов. Карта индексов представляет собой непрерывную последовательность элементов VLENGTH во втором массиве ints, начиная с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, если бит маски для этого элемента установлен, элемент загружается из массива по индексу a[f(N)], где f(N) — выражение отображения индекса offset + indexMap[mapOffset + N]]. Элементы результирующего вектора, для которых биты маски не установлены, получают значение нуля.
- Параметры:
-
species— тип требуемого вектора -
a— массив -
offset— смещение в массиве; может быть отрицательным, если относительные индексы в карте индексов компенсируют его и дают значение в пределах массива -
indexMap— карта индексов -
mapOffset— смещение в карте индексов -
m— маска, управляющая выбором элементов - Возвращает:
- вектор, загруженный из индексированных элементов массива
- Вызывает:
-
IndexOutOfBoundsException— еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора, для которого установлен бит маски - См. также:
fromMemorySegment
public static DoubleVector fromMemorySegment(VectorSpecies<Double> species, MemorySegment ms, long offset, ByteOrder bo)
Этот метод работает так, как если бы он возвращал результат вызова fromMemorySegment() следующим образом:
var m = species.maskAll(true);
return fromMemorySegment(species, ms, offset, bo, m);
- Параметры:
-
species— тип требуемого вектора -
ms— сегмент памяти -
offset— смещение в сегменте памяти -
bo— требуемый порядок байтов - Возвращает:
- вектор, загруженный из сегмента памяти
- Вызывает:
-
IndexOutOfBoundsException— еслиoffset+N*8 < 0илиoffset+N*8 >= ms.byteSize()для любого элементаNвектора -
IllegalStateException— если сеанс сегмента памяти не активен или если доступ выполняется из потока, отличного от потока, которому принадлежит сеанс. - Начиная с:
- 19
fromMemorySegment
public static DoubleVector fromMemorySegment(VectorSpecies<Double> species, MemorySegment ms, long offset, ByteOrder bo, VectorMask<Double> m)
double (положительным нулём). Байты объединяются в примитивные элементы вектора в соответствии с заданным порядком байтов. Элементы вектора располагаются в соответствии с порядком в памяти. Следующий псевдокод иллюстрирует поведение метода:
var slice = ms.asSlice(offset);
double[] ar = new double[species.length()];
for (int n = 0; n < ar.length; n++) {
if (m.laneIsSet(n)) {
ar[n] = slice.getAtIndex(ValuaLayout.JAVA_DOUBLE.withByteAlignment(1), n);
}
}
DoubleVector r = DoubleVector.fromArray(species, ar, 0);
- Примечание по реализации:
- Эта операция, вероятно, будет более эффективной, если заданный порядок байтов совпадает с собственным порядком байтов платформы, поскольку в этом случае методу не потребуется менять порядок байтов значений элементов вектора.
- Параметры:
-
species— тип требуемого вектора -
ms— сегмент памяти -
offset— смещение в сегменте памяти -
bo— требуемый порядок байтов -
m— маска, управляющая выбором элементов - Возвращает:
- вектор, загруженный из сегмента памяти
- Вызывает:
-
IndexOutOfBoundsException— еслиoffset+N*8 < 0илиoffset+N*8 >= ms.byteSize()для любого элементаNвектора, для которого установлен бит маски -
IllegalStateException— если сеанс сегмента памяти не активен или если доступ выполняется из потока, отличного от потока, которому принадлежит сеанс. - Начиная с:
- 19
intoArray
public final void intoArray(double[] a, int offset)
double[], начиная с указанного смещения. Для каждого элемента вектора, где N — индекс элемента вектора, элемент вектора с индексом N сохраняется в элемент массива a[offset+N].
- Параметры:
-
a— массив типаdouble[] -
offset— смещение в массиве - Вызывает:
-
IndexOutOfBoundsException— еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора
intoArray
public final void intoArray(double[] a, int offset, VectorMask<Double> m)
double[], начиная с указанного смещения и используя маску. Для каждого элемента вектора, где N — индекс элемента вектора, элемент вектора с индексом N сохраняется в элемент массива a[offset+N]. Если бит маски для N не установлен, соответствующий элемент массива a[offset+N] остаётся без изменений.
Проверка границ массива выполняется для элементов, биты маски которых установлены. Элементы, биты маски которых не установлены, не сохраняются и не обязаны соответствовать допустимым элементам a. То есть им могут соответствовать индексы массива меньше нуля или выходящие за его пределы.
- Параметры:
-
a— массив типаdouble[] -
offset— смещение в массиве -
m— маска, управляющая сохранением элементов - Вызывает:
-
IndexOutOfBoundsException— еслиoffset+N < 0илиoffset+N >= a.lengthдля любого элементаNвектора, для которого установлен бит маски
intoArray
public final void intoArray(double[] a, int offset, int[] indexMap, int mapOffset)
double[], используя индексы, полученные прибавлением фиксированного offset к последовательности дополнительных смещений из карты индексов. Карта индексов представляет собой непрерывную последовательность элементов VLENGTH во втором массиве ints, начиная с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, элемент вектора с индексом N сохраняется в элемент массива a[f(N)], где f(N) — выражение отображения индекса offset + indexMap[mapOffset + N]].
- Параметры:
-
a— массив -
offset— смещение, которое нужно сложить со смещениями из карты индексов -
indexMap— карта индексов -
mapOffset— смещение в карте индексов - Вызывает:
-
IndexOutOfBoundsException— еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора - См. также:
intoArray
public final void intoArray(double[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Double> m)
double[] под управлением маски, используя индексы, полученные прибавлением фиксированного offset к последовательности дополнительных смещений из карты индексов. Карта индексов представляет собой непрерывную последовательность элементов VLENGTH во втором массиве ints, начиная с заданного mapOffset. Для каждого элемента вектора, где N — индекс элемента вектора, если бит маски с индексом N установлен, элемент вектора с индексом N сохраняется в элемент массива a[f(N)], где f(N) — выражение отображения индекса offset + indexMap[mapOffset + N]].
- Параметры:
-
a— массив -
offset— смещение, которое нужно сложить со смещениями из карты индексов -
indexMap— карта индексов -
mapOffset— смещение в карте индексов -
m— маска - Вызывает:
-
IndexOutOfBoundsException— еслиmapOffset+N < 0или еслиmapOffset+N >= indexMap.length, или еслиf(N)=offset+indexMap[mapOffset+N]является недопустимым индексом вaдля любого элементаNвектора, для которого установлен бит маски - См. также:
intoMemorySegment
public final void intoMemorySegment(MemorySegment ms, long offset, ByteOrder bo)
Байты извлекаются из примитивных элементов вектора в соответствии с заданным порядком байтов. Элементы сохраняются в соответствии с их порядком в памяти.
Этот метод работает так, как если бы он вызывал intoMemorySegment() следующим образом:
var m = maskAll(true);
intoMemorySegment(ms, offset, bo, m);
- Определено в:
-
intoMemorySegmentв классеVector<Double> - Параметры:
-
ms— сегмент памяти -
offset— смещение в сегменте памяти -
bo— требуемый порядок байтов - Начиная с:
- 19
intoMemorySegment
public final void intoMemorySegment(MemorySegment ms, long offset, ByteOrder bo, VectorMask<Double> m)
Байты извлекаются из примитивных элементов вектора в соответствии с заданным порядком байтов. Элементы сохраняются в соответствии с их порядком в памяти.
Следующий псевдокод иллюстрирует поведение метода, где JAVA_E — размещение примитивного типа элемента, ETYPE — примитивный тип элемента, а EVector — примитивный тип вектора для этого вектора:
ETYPE[] a = this.toArray();
var slice = ms.asSlice(offset)
for (int n = 0; n < a.length; n++) {
if (m.laneIsSet(n)) {
slice.setAtIndex(ValueLayout.JAVA_E.withBitAlignment(8), n);
}
}
- Определено в:
-
intoMemorySegmentв классеVector<Double> - Параметры:
-
ms— сегмент памяти -
offset— смещение в сегменте памяти -
bo— требуемый порядок байтов -
m— маска, управляющая выбором элементов - Начиная с:
- 19
reinterpretAsBytes
public final ByteVector reinterpretAsBytes()
byte; байты извлекаются из элементов в соответствии с порядком от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(byte.class)). Его можно считать обратным по отношению к различным методам, объединяющим байты в более крупные элементы вектора, например Vector.reinterpretAsInts(). - Определено в:
-
reinterpretAsBytesв классеVector<Double> - Возвращает:
- объект
ByteVectorтой же формы и с тем же информационным содержимым - См. также:
viewAsIntegralLanes
public final LongVector viewAsIntegralLanes()
VSHAPE или VLENGTH и не меняет побитовое содержимое вектора. Если ETYPE вектора уже является целочисленным типом, возвращается тот же вектор без изменений. Метод возвращает значение этого выражения: convert(conv,0), где conv — это VectorOperators.Conversion.ofReinterpret(E.class,F.class), а F — тип без плавающей точки того же размера, что и E. - Определено в:
-
viewAsIntegralLanesв классеVector<Double> - Возвращает:
- исходный вектор, переинтерпретированный как вектор с типом без плавающей точки
- См. также:
viewAsFloatingLanes
public final DoubleVector viewAsFloatingLanes()
VSHAPE или VLENGTH и не меняет побитовое содержимое вектора. Если ETYPE вектора уже является типом с плавающей точкой, возвращается тот же вектор без изменений. Если размер элемента вектора не соответствует размеру ни одного типа с плавающей точкой, возникает исключение IllegalArgumentException. Метод возвращает значение этого выражения: convert(conv,0), где conv — это VectorOperators.Conversion.ofReinterpret(E.class,F.class), а F — тип с плавающей точкой того же размера, что и E, если такой существует. - Определено в:
-
viewAsFloatingLanesв классеVector<Double> - Возвращает:
- исходный вектор, переинтерпретированный как вектор с плавающей точкой
- См. также:
toString
public final String toString()
"[0,1,2...]", содержащее значения элементов вектора в порядке их расположения. Строка формируется так, как если бы был вызван метод Arrays.toString(), соответствующий массиву типа double, возвращаемому методом this.toArray().equals
public final boolean equals(Object obj)
Сравнение значений элементов выполняется так, как если бы был вызван метод Arrays.equals(), соответствующий массивам, возвращаемым для обоих векторов методом toArray().
hashCode
species
check
public final <F> Vector<F> check(VectorSpecies<F> species)
Vectorspecies == species()
? this
: throw new ClassCastException().check
public final <F> Vector<F> check(Class<F> elementType)
elementType == species().elementType()
? this
: throw new ClassCastException(). maskAll
public final VectorMask<Double> maskAll(boolean bit)
Метод возвращает значение этого выражения: species().maskAll(bit).
reinterpretAsShorts
public ShortVector reinterpretAsShorts()
short; элементы собираются из последовательных байтов в порядке от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(short.class)). Его можно считать обратным по отношению к Vector.reinterpretAsBytes(). - Определено в:
-
reinterpretAsShortsв классеVector<E> - Возвращает:
- объект
ShortVectorтой же формы и с тем же информационным содержимым
reinterpretAsInts
public IntVector reinterpretAsInts()
int; элементы формируются из последовательных байтов в порядке от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(int.class)). Его можно считать обратным методом для Vector.reinterpretAsBytes(). - Задано в:
-
reinterpretAsIntsв классеVector<E> - Возвращает:
IntVectorтой же формы и с тем же информационным содержимым
reinterpretAsLongs
public LongVector reinterpretAsLongs()
long; элементы формируются из последовательных байтов в порядке от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(long.class)). Его можно считать обратным методом для Vector.reinterpretAsBytes(). - Задано в:
-
reinterpretAsLongsв классеVector<E> - Возвращает:
LongVectorтой же формы и с тем же информационным содержимым
reinterpretAsFloats
public FloatVector reinterpretAsFloats()
float; элементы формируются из последовательных байтов в порядке от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(float.class)). Его можно считать обратным методом для Vector.reinterpretAsBytes(). - Задано в:
-
reinterpretAsFloatsв классеVector<E> - Возвращает:
FloatVectorтой же формы и с тем же информационным содержимым
reinterpretAsDoubles
public DoubleVector reinterpretAsDoubles()
double; элементы формируются из последовательных байтов в порядке от младшего к старшему. Это вспомогательный метод для выражения reinterpretShape(species().withLanes(double.class)). Его можно считать обратным методом для Vector.reinterpretAsBytes(). - Задано в:
-
reinterpretAsDoublesв классеVector<E> - Возвращает:
DoubleVectorтой же формы и с тем же информационным содержимым
convert
public final <F> Vector<F> convert(VectorOperators.Conversion<Double,F> conv, int part)
ETYPE в новый тип элементов (далее — FTYPE) согласно указанному преобразованию. Эта операция выполняется поэлементно и копирует значения ETYPE из входного вектора в соответствующие значения FTYPE в результате. Этот метод представляет собой ограниченную версию более общего, но реже используемого метода изменения формы convertShape(). Результат этого метода совпадает с выражением this.convertShape(conv, rsp, part), где выходной набор видов — rsp=this.species().withLanes(FTYPE.class).
Из-за сочетания неизменности формы и изменения размера элементов входной и выходной наборы видов могут иметь разное число элементов, что приводит к расширению или сжатию и требует выбора или вставки. Концептуально входные данные поэлементно преобразуются в логический результат, содержащий все преобразованные элементы, что приводит к логическому коэффициенту расширения ML = |FTYPE|/|ETYPE|. Затем результат копируется в выходной вектор, который может точно соответствовать ему по размеру (без изменений), быть слишком малым (требуется выбор) или слишком большим (требуется вставка).
Логическое поэлементное преобразование
Каждое конкретное преобразование описывается константой преобразования в классе VectorOperators. Для каждого оператора преобразования определены тип области определения и тип области значений. Тип области определения должен точно совпадать с типом элементов входного вектора, а тип области значений определяет тип элементов выходных векторов.
Поэлементный оператор преобразования может быть классифицирован как выполняющий преобразование без изменения размера, расширяющий или сжимающий — в зависимости от того, равен ли размер в битах типа области определения размеру типа области значений, меньше ли он или больше соответственно.
Независимо от этого, поэлементные операции преобразования также могут быть классифицированы как переинтерпретирующие или преобразующие значения — в зависимости от того, копирует ли преобразование биты представления без изменений или изменяет их, чтобы сохранить (частично или полностью) логическое значение входного значения.
При сжатии переинтерпретирующее преобразование отбрасывает старшие биты входных данных. При расширении оно дополняет старшие биты выходных данных нулями, если соответствующих входных битов нет.
Расширяющее преобразование, например S2I (значение short в int), принимает скалярное значение и представляет его в формате большего размера (всегда с некоторой избыточностью информации). Сжимающее преобразование, например D2F (значение double в float), принимает скалярное значение и представляет его в формате меньшего размера (всегда с некоторой потерей информации). Некоторые преобразования без изменения размера также могут приводить к потере информации, например L2D (значение long в double) или F2I (значение float в int). Переинтерпретирующие преобразования без изменения размера не приводят к потере данных, если только побитовое значение каким-либо образом не является допустимым для выходного типа. Преобразование битового шаблона NaN может привести к отбрасыванию битов мантиссы NaN.
Неизменность формы может потребовать выбора или вставки
Эта классификация поэлементных операторов как выполняющих преобразование без изменения размера, расширяющих или сжимающих важна, поскольку, если не указано иное, операции преобразования никогда не меняют форму вектора, независимо от того, как они могут изменять размер элементов.
Для управления этими расширениями и сжатиями параметр part выбирает частичные результаты при расширении или определяет место вставки результатов сжатия в выходной вектор. Для преобразований, сохраняющих форму (MP=1), возможны следующие случаи:
- Поэлементный оператор преобразования без изменения размера (
|ETYPE|=|FTYPE|): входные данные, логический результат и выходные данные имеют одинаковое число элементов и одинаковый размер в битах (ML=MP=1). Логический результат точно помещается в выходной вектор, и всегда выполняетсяpart=0.Все результаты преобразования помещаются в один выходной вектор без неиспользуемых элементов.
- Поэлементный расширяющий оператор преобразования (
|ETYPE|<|FTYPE|): логическое расширениеML=|FTYPE|/|ETYPE|>1означает, что логический результат вMS=MLраз больше выходного вектора.Число
partв диапазоне[0..MS-1]выбирает один изMSнепересекающихся блоков поVLENGTH/MSэлементов логического результата, начинающийся с исходного элементаpart*VLENGTH/MS. Этот выбранный блок копируется в выходной вектор и точно заполняет его. Остальная часть логического результата теряется.Группа таких выходных векторов с
MSнепересекающимися выбранными частями логического результата может (вручную) представлять полный логический результат преобразования. - Поэлементный сжимающий оператор преобразования (
|ETYPE|>|FTYPE|): логическое сжатиеML=|FTYPE|/|ETYPE|<1означает, что выходной вектор вMO=1/MLраз больше логического результата.Число
partв диапазоне[-(MO-1)..0]вставляет всеVLENGTHэлементов логического результата в выходной вектор, начиная с исходного элемента-part*VLENGTH. Всего в выходном вектореVLENGTH*MOэлементов; элементы, не содержащие преобразованных входных значений, заполняются нулями.Группу таких выходных векторов, в которых части логического результата направлены в
MOнепересекающихся блоков, можно (вручную) объединить с помощью оператора побитового XOR или (для чисел с плавающей запятой) оператораFIRST_NONZERO.
Например, преобразование из byte в long (логический коэффициент расширения ML=8) отбросит 87,5 % входных значений, чтобы выбрать и преобразовать оставшиеся 12,5 % в более широкие элементы long выходного вектора. Обратное преобразование преобразует все большие результаты обратно, но 87,5 % элементов выходного вектора останутся неиспользованными; избыточные элементы будут дополнены нулевыми битами.
- Задано в:
-
convertв классеVector<E> - Параметры типа:
F— тип элемента набора видов в обёртке- Параметры:
-
conv— требуемое скалярное преобразование, применяемое поэлементно -
part— номер части результата или ноль, если преобразование выполняется без изменения размера - Возвращает:
- вектор, полученный преобразованием формы и типа элементов этого вектора
- См. также:
castShape
public final <F> Vector<F> castShape(VectorSpecies<F> toSpecies, int part)
convertShape(conv,rsp,part), где conv — это VectorOperators.Conversion.ofCast(E.class,F.class). Если старый и новый наборы видов имеют разную форму, это операция изменения формы, которая может иметь особые издержки реализации.
- Задано в:
-
castShapeв классеVector<E> - Параметры типа:
F— тип элемента выходного набора видов в обёртке- Параметры:
-
toSpecies— требуемый выходной набор видов -
part— номер части результата или ноль, если расширение или сжатие не выполняется - Возвращает:
- вектор, полученный преобразованием типа элементов этого вектора
- См. также:
convertShape
public abstract <F> Vector<F> convertShape(VectorOperators.Conversion<Double,F> conv, VectorSpecies<F> rsp, int part)
ETYPE в новый тип элементов (далее — FTYPE) согласно указанному преобразованию. Эта операция выполняется поэлементно и копирует значения ETYPE из входного вектора в соответствующие значения FTYPE в результате. Если старый и новый наборы видов имеют одинаковую форму, поведение полностью совпадает с поведением более простого метода, сохраняющего форму: convert(). В таких случаях следует использовать более простой метод convert(), чтобы упростить понимание кода. В противном случае это операция изменения формы, которая может иметь особые издержки реализации.
Из-за сочетания изменения формы и размера элементов входной и выходной наборы видов могут иметь разное число элементов, что приводит к расширению или сжатию и требует выбора или вставки. Концептуально входные данные поэлементно преобразуются в логический результат, содержащий все преобразованные элементы, что приводит к логическому коэффициенту расширения ML = |FTYPE|/|ETYPE|. Затем результат копируется в выходной вектор, который может точно соответствовать ему по размеру (без изменений), быть слишком малым (требуется выбор) или слишком большим (требуется вставка).
- Точное соответствие (без изменений): расширение или сжатие физической формы соответствует расширению или сжатию элементов (
MP=ML). Должно выполнятьсяpart=0. - Логический результат в
MS>1раз больше выходной формы (выбор): числоpartв диапазоне[0..MS-1]определяет, какая изMSразличных частей логического результата выбирается для выходного вектора. Остальная часть логического результата теряется. - Выходная форма в
MO>1раз больше логического результата (вставка): числоpartв диапазоне[-(MO-1)..0]определяет, в какую изMOразличных позиций выходного вектора вставляется логический результат. Остальная часть выходного вектора дополняется нулевыми битами.
Следующий псевдокод иллюстрирует поведение этого метода при преобразованиях без изменения размера, а также преобразованиях с выбором или вставкой. (Этот псевдокод также применим к методу, сохраняющему форму, но для выходного набора видов действуют ограничения по форме.) Обратите внимание, что для конкретного сочетания оператора преобразования и форм применим только один из трёх путей выполнения.
FTYPE scalar_conversion_op(ETYPE s);
EVector a = ...;
VectorSpecies<F> rsp = ...;
int part = ...;
VectorSpecies<E> dsp = a.species();
int domlen = dsp.length();
int ranlen = rsp.length();
FTYPE[] logical = new FTYPE[domlen];
for (int i = 0; i < domlen; i++) {
logical[i] = scalar_conversion_op(a.lane(i));
}
FTYPE[] physical;
if (domlen == ranlen) { // MS=MO=1 => in-place
assert part == 0; //else AIOOBE
physical = logical;
} else if (domlen > ranlen) { // MS>1 => selection
int MS = domlen / ranlen;
assert 0 <= part && part < MS; //else AIOOBE
int origin = part * ranlen;
physical = Arrays.copyOfRange(logical, origin, origin + ranlen);
} else { // (domlen < ranlen) // MO>1 => insertion, padding
int MO = ranlen / domlen;
assert 0 >= part && part > -MO; //else AIOOBE
int origin = -part * domlen;
System.arraycopy(logical, 0, physical, origin, domlen);
}
return FVector.fromArray(ran, physical, 0);
- Задано в:
-
convertShapeв классеVector<E> - Параметры типа:
F— тип элемента выходного набора видов в обёртке- Параметры:
-
conv— требуемое скалярное преобразование, применяемое поэлементно -
rsp— требуемый выходной набор видов -
part— номер части результата или ноль, если преобразование выполняется без изменения размера - Возвращает:
- вектор, полученный преобразованием типа элементов этого вектора
- См. также:
getPayload
protected final Object getPayload()
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.