FloatVector
依赖于Java平台的预览功能:
FloatVector
涉及一个或多个预览API:MemorySegment
。
float
值序列的专用Vector
。
-
Field Summary
Modifier and TypeFieldDescriptionstatic final VectorSpecies
<Float> 代表VectorShape.S_128_BIT
的FloatVector
的种类。static final VectorSpecies
<Float> 代表VectorShape.S_256_BIT
的FloatVector
的种类。static final VectorSpecies
<Float> 代表VectorShape.S_512_BIT
的FloatVector
的种类。static final VectorSpecies
<Float> 代表VectorShape.S_64_BIT
的FloatVector
的种类。static final VectorSpecies
<Float> 代表VectorShape.S_Max_BIT
的FloatVector
的种类。static final VectorSpecies
<Float> FloatVector
的首选种类。 -
Method Summary
Modifier and TypeMethodDescriptionfinal FloatVector
abs()
返回此向量的绝对值。final FloatVector
add
(float e) 将此向量添加到输入标量的广播中。final FloatVector
add
(float e, VectorMask<Float> m) 将此向量添加到输入标量的广播中,选择由掩码控制的通道元素。final FloatVector
将此向量添加到第二个输入向量中。final FloatVector
add
(Vector<Float> v, VectorMask<Float> m) 将此向量添加到第二个输入向量中,选择由掩码控制的通道。abstract FloatVector
addIndex
(int scale) 将此向量的通道与给定常数相乘后相加。final FloatVector
blend
(float e, VectorMask<Float> m) 在掩码控制下,用标量值替换此向量的选定通道。final FloatVector
blend
(long e, VectorMask<Float> m) 在掩码控制下,用标量值替换此向量的选定通道。abstract FloatVector
blend
(Vector<Float> v, VectorMask<Float> m) 在掩码控制下,用第二个输入向量的对应通道替换此向量的选定通道。abstract FloatVector
broadcast
(float e) 返回与此向量相同种类的向量,其中所有通道元素均设置为原始值e
。abstract FloatVector
broadcast
(long e) 返回与此向量相同种类的向量,其中所有通道元素均设置为原始值e
。static FloatVector
broadcast
(VectorSpecies<Float> species, float e) 返回给定种类的向量,其中所有通道元素均设置为原始值e
。static FloatVector
broadcast
(VectorSpecies<Float> species, long e) 返回给定种类的向量,其中所有通道元素均设置为原始值e
。final <F> Vector
<F> castShape
(VectorSpecies<F> toSpecies, int part) 将向量从一种通道类型转换为另一种通道类型的便捷方法,在通道大小发生变化时进行必要的重塑。final <F> Vector
<F> 检查此向量是否具有给定元素类型,并返回此向量不变。final <F> Vector
<F> check
(VectorSpecies<F> species) 检查此向量是否具有给定种类,并返回此向量不变。abstract VectorMask
<Float> compare
(VectorOperators.Comparison op, float e) 根据给定的比较操作,通过将此向量与输入标量进行比较来测试此向量。final VectorMask
<Float> compare
(VectorOperators.Comparison op, float e, VectorMask<Float> m) 根据给定的比较操作,在由掩码选择的通道中,通过将此向量与输入标量进行比较来测试此向量。abstract VectorMask
<Float> compare
(VectorOperators.Comparison op, long e) 根据给定的比较操作,通过将此向量与输入标量进行比较来测试此向量。final VectorMask
<Float> compare
(VectorOperators.Comparison op, long e, VectorMask<Float> m) 根据给定的比较操作,在由掩码选择的通道中,通过将此向量与输入标量进行比较来测试此向量。abstract VectorMask
<Float> compare
(VectorOperators.Comparison op, Vector<Float> v) 返回此向量的哈希码值。abstract FloatVector
compress
(VectorMask<Float> m) 选择由特定掩码控制的通道,压缩此向量的通道元素。final <F> Vector
<F> convert
(VectorOperators.Conversion<Float, F> conv, int part) abstract <F> Vector
<F> convertShape
(VectorOperators.Conversion<Float, F> conv, VectorSpecies<F> rsp, int part) final FloatVector
div
(float e) 将此向量除以输入标量的广播。final FloatVector
div
(float e, VectorMask<Float> m) 将此向量除以输入标量的广播,选择由掩码控制的通道元素。final FloatVector
将此向量除以第二个输入向量。final FloatVector
div
(Vector<Float> v, VectorMask<Float> m) 将此向量除以第二个输入向量,在掩码控制下。final VectorMask
<Float> eq
(float e) 测试此向量是否等于输入标量。final VectorMask
<Float> 测试此向量是否等于另一个输入向量。final boolean
指示此向量是否与其他对象相同。abstract FloatVector
expand
(VectorMask<Float> m) 在掩码控制下,扩展此向量的通道元素。final FloatVector
fma
(float b, float c) 将此向量乘以标量乘数,并将结果与标量加数相加。final FloatVector
将此向量乘以第二个输入向量,并将结果与第三个向量相加。static FloatVector
fromArray
(VectorSpecies<Float> species, float[] a, int offset) 从以偏移量开始的float[]
数组加载向量。static FloatVector
fromArray
(VectorSpecies<Float> species, float[] a, int offset, int[] indexMap, int mapOffset) 从float[]
数组中加载新向量,使用通过将固定offset
与来自索引映射的一系列次要偏移相加获得的索引。static FloatVector
fromArray
(VectorSpecies<Float> species, float[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Float> m) 在掩码控制下,从float[]
数组中加载由索引映射的一系列次要偏移获得的索引组成的新向量。static FloatVector
fromArray
(VectorSpecies<Float> species, float[] a, int offset, VectorMask<Float> m) 从以偏移量开始并使用掩码的float[]
数组加载向量。static FloatVector
fromMemorySegment
(VectorSpecies<Float> species, MemorySegmentPREVIEW ms, long offset, ByteOrder bo) static FloatVector
fromMemorySegment
(VectorSpecies<Float> species, MemorySegmentPREVIEW ms, long offset, ByteOrder bo, VectorMask<Float> m) protected final Object
final int
hashCode()
返回向量的哈希码值。final void
intoArray
(float[] a, int offset) 将此向量存储到以偏移量开始的float[]
数组中。final void
intoArray
(float[] a, int offset, int[] indexMap, int mapOffset) 将此向量散布到float[]
数组中,使用通过将固定offset
与来自索引映射的一系列次要偏移相加获得的索引。final void
intoArray
(float[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Float> m) 在掩码控制下,将此向量散布到float[]
数组中,使用通过将固定offset
与来自索引映射的一系列次要偏移相加获得的索引。final void
intoArray
(float[] a, int offset, VectorMask<Float> m) 在偏移量开始并使用掩码的float[]
数组中存储此向量。final void
intoMemorySegment
(MemorySegmentPREVIEW ms, long offset, ByteOrder bo) final void
intoMemorySegment
(MemorySegmentPREVIEW ms, long offset, ByteOrder bo, VectorMask<Float> m) abstract float
lane
(int i) 获取通道索引为i
的通道元素。final FloatVector
lanewise
(VectorOperators.Binary op, float e) 将此向量的通道值与广播标量值组合。final FloatVector
lanewise
(VectorOperators.Binary op, float e, VectorMask<Float> m) 将此向量的通道值与广播标量值组合,选择由掩码控制的通道元素。final FloatVector
lanewise
(VectorOperators.Binary op, long e) 将此向量的通道值与广播标量值组合。final FloatVector
lanewise
(VectorOperators.Binary op, long e, VectorMask<Float> m) 将此向量的对应通道值与第二个输入向量的对应通道值组合,选择由掩码控制的通道元素。abstract FloatVector
lanewise
(VectorOperators.Binary op, Vector<Float> v) 将此向量的对应通道值与第二个输入向量的对应通道值组合。abstract FloatVector
lanewise
(VectorOperators.Binary op, Vector<Float> v, VectorMask<Float> m) 将此向量的对应通道值与第二个输入向量的对应通道值组合,选择由掩码控制的通道元素。final FloatVector
lanewise
(VectorOperators.Ternary op, float e1, float e2) 将此向量的通道值与两个广播标量值组合。final FloatVector
lanewise
(VectorOperators.Ternary op, float e1, float e2, VectorMask<Float> m) 将此向量的通道值与两个广播标量值组合,选择由掩码控制的通道元素。final FloatVector
lanewise
(VectorOperators.Ternary op, float e1, Vector<Float> v2) 将此向量的通道值与另一个向量和一个广播标量值组合。final FloatVector
lanewise
(VectorOperators.Ternary op, float e1, Vector<Float> v2, VectorMask<Float> m) 将此向量的通道值与另一个向量和一个广播标量值组合,选择由掩码控制的通道元素。final FloatVector
lanewise
(VectorOperators.Ternary op, Vector<Float> v1, float e2) 将此向量的通道值与另一个向量和一个广播标量值组合。final FloatVector
lanewise
(VectorOperators.Ternary op, Vector<Float> v1, float e2, VectorMask<Float> m) 将此向量的通道值与另一个向量和一个广播标量值组合,选择由掩码控制的通道元素。abstract FloatVector
将此向量的对应通道值与第二个和第三个输入向量的对应通道值组合。abstract FloatVector
lanewise
(VectorOperators.Ternary op, Vector<Float> v1, Vector<Float> v2, VectorMask<Float> m) 将此向量的对应通道值与第二个和第三个输入向量的对应通道值组合,选择由掩码控制的通道元素。abstract FloatVector
对此向量的通道值进行操作。abstract FloatVector
lanewise
(VectorOperators.Unary op, VectorMask<Float> m) 操作此向量的lane值,选择受掩码控制的lane元素。final VectorMask
<Float> lt
(float e) 测试此向量是否小于输入标量。final VectorMask
<Float> 测试此向量是否小于另一个输入向量。final VectorMask
<Float> maskAll
(boolean bit) 返回与此向量相同类型的掩码,其中每个lane根据给定的单个布尔值设置或取消,该布尔值广播到所有lane。final FloatVector
max
(float e) 计算此向量和输入标量的广播之间的较大值。final FloatVector
计算此向量和第二个输入向量之间的较大值。final FloatVector
min
(float e) 计算此向量和输入标量的广播之间的较小值。final FloatVector
计算此向量和第二个输入向量之间的较小值。final FloatVector
mul
(float e) 将此向量乘以输入标量的广播。final FloatVector
mul
(float e, VectorMask<Float> m) 将此向量乘以输入标量的广播,选择受掩码控制的lane元素。final FloatVector
将此向量乘以第二个输入向量。final FloatVector
mul
(Vector<Float> v, VectorMask<Float> m) 将此向量乘以第二个输入向量,在掩码的控制下。final FloatVector
neg()
取反此向量。final FloatVector
pow
(float b) 将此向量提升为标量幂。final FloatVector
将此向量提升为第二个输入向量的幂。abstract FloatVector
重新排列此向量的lane元素,根据特定洗牌控制选择lane。abstract FloatVector
rearrange
(VectorShuffle<Float> s, Vector<Float> v) 重新排列两个向量的lane元素,根据特定洗牌中的正常和异常索引选择lane,使用这些索引来引导数据。abstract FloatVector
rearrange
(VectorShuffle<Float> s, VectorMask<Float> m) 重新排列此向量的lane元素,根据特定洗牌和掩码控制选择lane。abstract float
返回从此向量的所有lane累积的值。abstract float
返回从此向量的选定lane根据掩码控制的累积值。final ByteVector
将此向量视为具有相同形状和内容但lane类型为byte
的向量,其中字节根据小端顺序从lane中提取。将此向量重新解释为具有相同形状和内容但lane类型为double
的向量,其中lane根据小端顺序从连续字节中组装而成。将此向量重新解释为具有相同形状和内容但lane类型为float
的向量,其中lane根据小端顺序从连续字节中组装而成。将此向量重新解释为具有相同形状和内容但lane类型为int
的向量,其中lane根据小端顺序从连续字节中组装而成。将此向量重新解释为具有相同形状和内容但lane类型为long
的向量,其中lane根据小端顺序从连续字节中组装而成。将此向量重新解释为具有相同形状和内容但lane类型为short
的向量,其中lane根据小端顺序从连续字节中组装而成。abstract FloatVector
selectFrom
(Vector<Float> v) 使用存储在此向量的lane中的索引值,组装存储在第二个向量v
中的值。abstract FloatVector
selectFrom
(Vector<Float> s, VectorMask<Float> m) 使用存储在此向量的lane中的索引值,在掩码的控制下,组装存储在第二个向量中的值。abstract FloatVector
slice
(int origin) 切片一段相邻的lane,从当前向量中的给定origin
lane开始。abstract FloatVector
切片一段相邻的lane,在当前向量中从给定的origin
lane开始,并继续(如有必要)到紧随其后的向量中。final FloatVector
slice
(int origin, Vector<Float> w, VectorMask<Float> m) 切片一段相邻的lane,在当前向量中从给定的origin
lane开始,在掩码的控制下,并继续(如有必要)到紧随其后的向量中。final VectorSpecies
<Float> species()
返回此向量的species。final FloatVector
sqrt()
计算此向量的平方根。final FloatVector
sub
(float e) 从此向量中减去一个输入标量。final FloatVector
sub
(float e, VectorMask<Float> m) 从此向量中减去一个输入标量,在掩码的控制下。final FloatVector
从此向量中减去第二个输入向量。final FloatVector
sub
(Vector<Float> v, VectorMask<Float> m) 从此向量中减去第二个输入向量,在掩码的控制下。abstract VectorMask
<Float> 根据给定操作测试此向量的lane。abstract VectorMask
<Float> test
(VectorOperators.Test op, VectorMask<Float> m) 根据给定操作测试此向量的选定lane。final float[]
toArray()
返回包含所有lane值的float[]
类型的数组。final double[]
返回包含所有lane值的double[]
数组,转换为double
类型。final int[]
返回包含所有lane值的int[]
数组,转换为int
类型。final long[]
返回包含所有lane值的long[]
数组,转换为long
类型。final String
toString()
返回此向量的字符串表示形式,格式为"[0,1,2...]"
,报告此向量的lane值,按lane顺序排列。abstract FloatVector
unslice
(int origin) 反转slice(),将当前向量作为零lane值背景输入中的一个切片插入。abstract FloatVector
反转slice(),将当前向量作为另一个"背景"输入向量中的一个切片插入,该向量被视为假设的后续slice()
操作的一个输入。abstract FloatVector
unslice
(int origin, Vector<Float> w, int part, VectorMask<Float> m) 反转slice(),将当前向量作为另一个"背景"输入向量中的一个切片插入(在掩码的控制下),该向量被视为假设的后续slice()
操作的一个输入。final FloatVector
将此向量视为具有相同形状、长度和内容但lane类型为浮点类型的向量。final IntVector
将此向量视为具有相同形状、长度和内容但不是浮点类型的lane类型的向量。abstract FloatVector
withLane
(int i, float e) 用值e
替换此向量在lane索引i
处的lane元素。static FloatVector
zero
(VectorSpecies<Float> species) 返回所有lane元素均设置为零的给定species的向量,即默认的原始值。Methods declared in class jdk.incubator.vector.Vector
bitSize, byteSize, compare, elementSize, elementType, length, reduceLanesToLong, reduceLanesToLong, reinterpretShape, shape, toShuffle
-
Field Details
-
SPECIES_64
代表FloatVector
的VectorShape.S_64_BIT
的species。 -
SPECIES_128
代表FloatVector
的VectorShape.S_128_BIT
的species。 -
SPECIES_256
代表FloatVector
的VectorShape.S_256_BIT
的species。 -
SPECIES_512
代表FloatVector
的VectorShape.S_512_BIT
的species。 -
SPECIES_MAX
代表FloatVector
的VectorShape.S_Max_BIT
的species。 -
SPECIES_PREFERRED
FloatVector
的首选species。首选species是平台的最大位大小的species。
-
-
Method Details
-
zero
返回所有lane元素均设置为零的给定species的向量,即默认的原始值。- 参数:
-
species
- 所需零向量的species - 返回:
- 一个零向量
-
broadcast
返回与此向量相同species的向量,其中所有lane元素均设置为原始值e
。当前向量的内容将被丢弃;此操作只与species相关。此方法返回此表达式的值:
FloatVector.broadcast(this.species(), e)
。- API注释:
-
与超类型
Vector
中名为broadcast()
的类似方法不同,此方法不需要验证其参数,并且不会抛出IllegalArgumentException
。因此,此方法比超类型方法更可取。 - 参数:
-
e
- 要广播的值 - 返回:
-
所有lane元素均设置为原始值
e
的向量 - 参见:
-
broadcast
返回与给定species相同的向量,其中所有lane元素均设置为原始值e
。- 参数:
-
species
- 所需向量的species -
e
- 要广播的值 - 返回:
-
所有lane元素均设置为原始值
e
的向量 - 参见:
-
broadcast
返回一个与当前向量相同类型的向量,其中所有的lane元素都设置为原始值e
。当前向量的内容将被丢弃;只有类型对这个操作是相关的。该方法返回这个表达式的值:
EVector.broadcast(this.species(), (ETYPE)e)
,其中EVector
是特定于该向量元素类型ETYPE
的向量类。必须确保
long
值e
可以准确表示为该向量类型ETYPE
,即e==(long)(ETYPE)e
。如果违反了这个规则,问题不会在静态时被检测到,但会在运行时抛出IllegalArgumentException
。因此,这个方法在一定程度上削弱了对立即常量和其他标量的静态类型检查,但通过提高通用API的表达能力来弥补这一点。请注意,范围在[-128..127]
的e
值总是可以接受的,因为每个ETYPE
都将接受每个byte
值。 -
broadcast
返回一个给定类型的向量,其中所有的lane元素都设置为原始值e
。必须确保long
值可以准确表示为向量类型ETYPE
,即e==(long)(ETYPE)e
。- 参数:
-
species
- 所需向量的类型 -
e
- 要广播的值 - 返回:
-
一个向量,其中所有的lane元素都设置为原始值
e
- 抛出:
-
IllegalArgumentException
- 如果给定的long
值无法被向量的ETYPE
表示 - 参见:
-
lanewise
操作这个向量的lane值。这是一个逐lane一元操作,将所选操作应用于每个lane。 -
lanewise
操作这个向量的lane值,通过一个掩码来控制lane元素的选择。这是一个逐lane一元操作,将所选操作应用于每个lane。 -
lanewise
将这个向量的对应lane值与第二个输入向量的对应lane值组合。这是一个逐lane二元操作,将所选操作应用于每个lane。 -
lanewise
public abstract FloatVector lanewise(VectorOperators.Binary op, Vector<Float> v, VectorMask<Float> m) 将这个向量的对应lane值与第二个输入向量的对应lane值组合,通过一个掩码来控制lane元素的选择。这是一个逐lane二元操作,将所选操作应用于每个lane。 -
lanewise
将这个向量的lane值与广播标量的值组合。这是一个逐lane二元操作,将所选操作应用于每个lane。返回值将等于这个表达式:this.lanewise(op, this.broadcast(e))
。- 参数:
-
op
- 用于处理lane值的操作 -
e
- 输入标量 - 返回:
- 将操作逐lane应用于两个输入向量的结果
- 抛出:
-
UnsupportedOperationException
- 如果这个向量不支持请求的操作 - 参见:
-
lanewise
将这个向量的lane值与广播标量的值组合,通过一个掩码来控制lane元素的选择。这是一个掩码逐lane二元操作,将所选操作应用于每个lane。返回值将等于这个表达式:this.lanewise(op, this.broadcast(e), m)
。- 参数:
-
op
- 用于处理lane值的操作 -
e
- 输入标量 -
m
- 控制lane选择的掩码 - 返回:
- 将操作逐lane应用于输入向量和标量的结果
- 抛出:
-
UnsupportedOperationException
- 如果这个向量不支持请求的操作 - 参见:
-
lanewise
将这个向量的lane值与广播标量的值组合。这是一个逐lane二元操作,将所选操作应用于每个lane。返回值将等于这个表达式:this.lanewise(op, this.broadcast(e))
。 -
lanewise
将此向量的相应通道值与第二个输入向量的通道值结合,通过掩码控制通道元素的选择。这是一种逐通道二元操作,将所选操作应用于每个通道。第二个操作数是广播整数值。返回值将等于此表达式:this.lanewise(op, this.broadcast(e), m)
。 -
lanewise
public abstract FloatVector lanewise(VectorOperators.Ternary op, Vector<Float> v1, Vector<Float> v2) 将此向量的相应通道值与第二个和第三个输入向量的通道值结合。这是一种逐通道三元操作,将所选操作应用于每个通道。 -
lanewise
public abstract FloatVector lanewise(VectorOperators.Ternary op, Vector<Float> v1, Vector<Float> v2, VectorMask<Float> m) 将此向量的相应通道值与第二个和第三个输入向量的通道值结合,通过掩码控制通道元素的选择。这是一种逐通道三元操作,将所选操作应用于每个通道。 -
lanewise
将此向量的通道值与两个广播标量的值结合。这是一种逐通道三元操作,将所选操作应用于每个通道。返回值将等于此表达式:this.lanewise(op, this.broadcast(e1), this.broadcast(e2))
。- 参数:
-
op
- 用于组合通道值的操作 -
e1
- 第一个输入标量 -
e2
- 第二个输入标量 - 返回:
- 将操作逐通道应用于输入向量和标量的结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
-
lanewise
public final FloatVector lanewise(VectorOperators.Ternary op, float e1, float e2, VectorMask<Float> m) 将此向量的通道值与两个广播标量的值结合,通过掩码控制通道元素的选择。这是一种带掩码的逐通道三元操作,将所选操作应用于每个通道。返回值将等于此表达式:this.lanewise(op, this.broadcast(e1), this.broadcast(e2), m)
。- 参数:
-
op
- 用于组合通道值的操作 -
e1
- 第一个输入标量 -
e2
- 第二个输入标量 -
m
- 控制通道选择的掩码 - 返回:
- 将操作逐通道应用于输入向量和标量的结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
-
lanewise
将此向量的通道值与另一个向量和一个广播标量的值结合。这是一种逐通道三元操作,将所选操作应用于每个通道。返回值将等于此表达式:this.lanewise(op, v1, this.broadcast(e2))
。- 参数:
-
op
- 用于组合通道值的操作 -
v1
- 另一个输入向量 -
e2
- 输入标量 - 返回:
- 将操作逐通道应用于输入向量和标量的结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
-
lanewise
public final FloatVector lanewise(VectorOperators.Ternary op, Vector<Float> v1, float e2, VectorMask<Float> m) 将此向量的通道值与另一个向量和广播标量的值结合,通过掩码控制通道元素的选择。这是一种掩码通道级三元操作,将所选操作应用于每个通道。返回值将等于此表达式:this.lanewise(op, v1, this.broadcast(e2), m)
。- 参数:
-
op
- 用于结合通道值的操作 -
v1
- 另一个输入向量 -
e2
- 输入标量 -
m
- 控制通道选择的掩码 - 返回:
- 将操作应用于输入向量和标量的通道级结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
-
lanewise
将此向量的通道值与另一个向量和广播标量的值结合。这是一种通道级三元操作,将所选操作应用于每个通道。返回值将等于此表达式:this.lanewise(op, this.broadcast(e1), v2)
。- 参数:
-
op
- 用于结合通道值的操作 -
e1
- 输入标量 -
v2
- 另一个输入向量 - 返回:
- 将操作应用于输入向量和标量的通道级结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
-
lanewise
public final FloatVector lanewise(VectorOperators.Ternary op, float e1, Vector<Float> v2, VectorMask<Float> m) 将此向量的通道值与另一个向量和广播标量的值结合,通过掩码控制通道元素的选择。这是一种掩码通道级三元操作,将所选操作应用于每个通道。返回值将等于此表达式:this.lanewise(op, this.broadcast(e1), v2, m)
。- 参数:
-
op
- 用于结合通道值的操作 -
e1
- 输入标量 -
v2
- 另一个输入向量 -
m
- 控制通道选择的掩码 - 返回:
- 将操作应用于输入向量和标量的通道级结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
-
add
-
add
- 参数:
-
e
- 输入标量 - 返回:
- 将此向量的每个通道添加到标量的结果
- 参见:
-
add
-
add
- 参数:
-
e
- 输入标量 -
m
- 控制通道选择的掩码 - 返回:
- 将此向量的每个通道添加到标量的结果
- 参见:
-
sub
-
sub
- 参数:
-
e
- 输入标量 - 返回值:
- 从每个通道中减去标量的结果
- 参见:
-
sub
-
sub
- 参数:
-
e
- 输入标量 -
m
- 控制通道选择的掩码 - 返回值:
- 从该向量中减去标量的结果
- 参见:
-
mul
-
mul
- 参数:
-
e
- 输入标量 - 返回值:
- 将该向量乘以给定标量的结果
- 参见:
-
mul
-
mul
- 参数:
-
e
- 输入标量 -
m
- 控制通道选择的掩码 - 返回值:
- 将该向量的每个通道乘以标量的结果
- 参见:
-
div
-
div
- API 注释:
- 由于底层标量运算符是IEEE浮点数,实际上除以零不会抛出异常,而会产生有符号的无穷大或NaN。
- 参数:
-
e
- 输入标量 - 返回值:
- 将此向量的每个通道除以标量的结果
- 参见:
-
div
-
div
- API 注释:
- 由于底层标量运算符是IEEE浮点数,实际上除以零不会抛出异常,而会产生有符号的无穷大或NaN。
- 参数:
-
e
- 输入标量 -
m
- 控制通道选择的掩码 - 返回值:
- 将此向量的每个通道除以标量的结果
- 参见:
-
min
-
min
- API 注释:
-
对于此方法,浮点数负零
-0.0
被视为与默认值(正零)不同且小于默认值的值。 - 参数:
-
e
- 输入标量 - 返回值:
- 将此向量乘以给定标量的结果
- 参见:
-
max
-
max
- API注释:
-
对于此方法,浮点负零
-0.0
被视为与默认值(正零)不同且小于默认值。 - 参数:
-
e
- 输入标量 - 返回值:
- 将此向量乘以给定标量的结果
- 参见:
-
pow
将此向量的每个元素提升为第二个输入向量的幂。这是一种逐个元素的二元操作,对每对对应的元素应用符合规范Math.pow(a,b)
的操作。该操作被调整为将操作数和结果转换,具体地将float
操作数扩展为double
操作数,并将double
结果缩小为float
结果。此方法也等同于表达式lanewise
(
POW
, b)
。这不是像
add
这样的完整命名操作。此操作的掩码版本不是直接可用的,但可以通过lanewise
的掩码版本获得。- 参数:
-
b
- 用于提升此向量的向量指数 - 返回值:
-
此向量的
b
次幂 - 参见:
-
pow
将此向量提升为标量幂。这是一种逐个元素的二元操作,对每对对应的元素应用符合规范Math.pow(a,b)
的操作。该操作被调整为将操作数和结果转换,具体地将float
操作数扩展为double
操作数,并将double
结果缩小为float
结果。此方法也等同于表达式lanewise
(
POW
, b)
。- 参数:
-
b
- 用于提升此向量的标量指数 - 返回值:
-
此向量的
b
次幂 - 参见:
-
neg
-
abs
-
sqrt
计算此向量的平方根。这是一种逐个元素的一元操作,对每个元素应用符合规范Math.sqrt(a)
的操作。该操作被调整为将操作数和结果转换,具体地将float
操作数扩展为double
操作数,并将double
结果缩小为float
结果。此方法也等同于表达式lanewise
(
SQRT
)
。- 返回值:
- 此向量的平方根
- 参见:
-
eq
测试此向量是否等于另一个输入向量。这是一种逐个元素的二元测试操作,对每对对应的元素应用原始等于操作(==
)。结果与compare(VectorOperators.EQ, v)
相同。 -
eq
测试此向量是否等于输入标量。这是一种逐个元素的二元测试操作,对每个元素应用原始等于操作(==
)。结果与compare(VectorOperators.Comparison.EQ, e)
相同。- 参数:
-
e
- 输入标量 - 返回值:
-
测试此向量是否等于
e
的结果掩码 - 参见:
-
lt
测试此向量是否小于另一个输入向量。这是一种逐个元素的二元测试操作,对每个元素应用原始小于操作(<
)。结果与compare(VectorOperators.LT, v)
相同。 -
lt
测试该向量是否小于输入标量。这是一种通道级的二进制测试操作,将原始小于操作(<
)应用于每个通道。结果与compare(VectorOperators.LT, e)
相同。- 参数:
-
e
- 输入标量 - 返回值:
- 测试该向量是否小于输入标量的掩码结果
- 参见:
-
test
根据给定操作测试该向量的通道。这是一种通道级的一元测试操作,将给定的测试操作应用于每个通道值。 -
test
根据给定操作测试该向量的选定通道。这是一种带掩码的通道级一元测试操作,将给定的测试操作应用于每个通道值。返回的结果等同于表达式test(op).and(m)
。 -
compare
通过将其与另一个输入向量进行比较,根据给定的比较操作测试该向量。这是一种通道级的二进制测试操作,将给定的比较操作应用于每对对应的通道值。 -
compare
通过将其与输入标量进行比较,根据给定的比较操作测试该向量。这是一种通道级的二进制测试操作,将比较操作应用于每个通道。结果与
compare(op, broadcast(species(), e))
相同。也就是说,标量可以被视为广播到相同种类的向量,然后根据所选的比较操作与原始向量进行比较。 -
compare
-
compare
通过将其与输入标量进行比较,根据给定的比较操作测试该向量。这是一种通道级的二进制测试操作,将给定的比较操作应用于每个通道值,与广播值配对。结果与
this.compare(op, this.broadcast(e))
相同。也就是说,标量可以被视为广播到相同种类的向量,然后根据所选的比较操作与原始向量进行比较。 -
compare
通过将其与输入标量进行比较,在由掩码选择的通道中根据给定的比较操作测试该向量。这是一种带掩码的通道级二进制测试操作,将给定的比较操作应用于每个通道值,与广播值配对。返回的结果等同于表达式compare(op,e).and(m)
。 -
blend
用第二个输入向量的相应通道替换此向量的选定通道,受掩码控制。这是一种受掩码控制的通道级二进制操作,它从两个输入中选择每个通道的值。- 对于掩码中设置的任何通道,新的通道值取自第二个输入向量,并替换此向量的该通道中的任何值。
- 对于掩码中未设置的任何通道,替换被抑制,此向量保留该通道中原始的值。
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
将此向量的通道添加到其相应的通道编号,乘以给定的常数。这是一种通道级一元操作,对于每个通道N
,计算缩放后的索引值N*scale
,并将其添加到当前向量的通道N
中的值。缩放必须不要太大,元素大小也不要太小,以至于在使用向量通道类型
ETYPE
表示任何N*scale
或VLENGTH*scale
时会发生溢出。以下伪代码说明了这种行为:
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
用标量值替换此向量的选定通道,受掩码控制。这是一种受掩码控制的通道级二进制操作,它从两个输入中选择每个通道的值。返回的结果等于表达式blend(broadcast(e),m)
。- 参数:
-
e
- 输入标量,包含替换通道值 -
m
- 控制标量通道选择的掩码 - 返回:
- 将此向量的通道元素与标量值混合的结果
-
blend
用标量值替换此向量的选定通道,受掩码控制。这是一种受掩码控制的通道级二进制操作,它从两个输入中选择每个通道的值。返回的结果等于表达式blend(broadcast(e),m)
。 -
slice
从当前向量的给定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
在掩码控制下,从当前向量的给定origin
通道开始,连续切片相邻通道,继续(如有必要)到紧随其后的向量。将VLENGTH
个通道块提取到自己的向量中并返回。结果向量中未设置的通道将为零。在给定掩码中设置的通道将包含从所选通道的this
或v1
复制的数据。这是一种跨通道操作,将通道元素从当前向量和第二个向量移至前端。两个向量都可以被视为长度为
2*VLENGTH
的组合“背景”,从中提取一个切片。返回的结果等于表达式broadcast(0).blend(slice(origin,v1),m)
。 -
slice
从当前向量的给定origin
通道开始,切片一段相邻通道。将一个VLENGTH
通道块(可能带有零通道填充)提取到自己的向量中并返回。这是一个方便的方法,从一个单一向量中切片,针对零通道的扩展背景。它等同于slice
(origin,
broadcast
(0))
。也可以简单地将其视为从后向前通道的跨通道移位,零填充在向量末尾的空出通道中。在这种观点下,移位计数为origin
。- 参数:
-
origin
- 转移到切片中的第一个输入通道 - 返回:
-
最后的
VLENGTH-origin
个输入通道,从输出的第一个通道开始放置,末尾填充为零 - 参见:
-
unslice
反转slice(),将当前向量作为一个切片插入到另一个“背景”输入向量中,该向量被视为假设的后续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
反转slice(),在掩码的控制下将当前向量作为一个切片插入到另一个“背景”输入向量中,该向量被视为假设的后续slice()
操作的一个输入。这是一个跨通道操作,将当前向量的通道元素向前排列,并将其通道(由掩码选择)插入到逻辑背景向量对中。与此方法的无掩码版本相比,只会返回一对中的一个,由
part
数选择。对于掩码选择的每个通道N
,如果背景中存在通道,则将通道值复制到第一个背景向量的通道origin+N
中,否则将通道值复制到第二个背景向量的通道origin+N-VLENGTH
中(保证存在)。如果对应的输入通道N
在掩码中未设置,则背景通道保留其原始值。更新后插入切片的第一个或第二个背景向量将被返回。零或一的part
数选择第一个或第二个更新后的背景向量。 -
unslice
-
rearrange
重新排列此向量的通道元素,根据特定洗牌控制选择通道。这是一个跨通道操作,重新排列此向量的通道元素。对于每个洗牌的通道N
,以及每个洗牌中的通道源索引I=s.laneSource(N)
,输出通道N
从输入向量的通道I
获取值。 -
rearrange
重新排列此向量的通道元素,根据特定洗牌和掩码控制选择通道。这是一个跨通道操作,重新排列此向量的通道元素。对于每个洗牌的通道N
,以及每个洗牌中的通道源索引I=s.laneSource(N)
,如果掩码设置,则输出通道N
从输入向量的通道I
获取值。否则,如果掩码未设置,则输出通道N
设置为零。此方法返回以下伪代码的值:
Vector<E> r = this.rearrange(s.wrapIndexes()); VectorMask<E> valid = s.laneIsValid(); if (m.andNot(valid).anyTrue()) throw ...; return broadcast(0).blend(r, m);
-
rearrange
重新排列两个向量的通道元素,根据特定洗牌控制选择通道,使用洗牌中的正常和异常索引来引导数据。这是一个跨通道操作,重新排列两个输入向量(当前向量和第二个向量v
)的通道元素。对于每个洗牌的通道N
,以及每个洗牌中的通道源索引I=s.laneSource(N)
,如果I>=0
,则输出通道N
从第一个向量的通道I
获取值。否则,异常索引I
通过添加VLENGTH
进行包装,并用于索引第二个向量,索引为I+VLENGTH
。此方法返回以下伪代码的值:
Vector<E> r1 = this.rearrange(s.wrapIndexes()); // 或者:r1 = this.rearrange(s, s.laneIsValid()); Vector<E> r2 = v.rearrange(s.wrapIndexes()); return r2.blend(r1,s.laneIsValid());
-
compress
压缩该向量的通道元素,选择由特定掩码控制的通道。这是一个跨通道操作,根据指定的掩码压缩该向量的通道元素。对于掩码的每个通道N
,如果通道N
处的掩码被设置,则选择输入向量在通道N
处的元素,并连续存储到输出向量中,从通道0
开始。输出向量的所有上部剩余通道(如果有)都设置为零。 -
expand
在特定掩码的控制下,扩展该向量的通道元素。这是一个跨通道操作,根据指定的掩码将该向量的连续通道元素扩展到输出向量的通道中。对于掩码的每个通道N
,如果掩码在通道N
处被设置,则从通道0
开始选择输入向量的下一个连续元素,并将其存储到输出向量的通道N
处。输出向量的所有剩余通道(如果有)都设置为零。 -
selectFrom
使用存储在该向量的通道中的索引值,组装存储在第二个向量v
中的值。因此,第二个向量充当一个表,其元素由当前向量中的索引选择。这是一个跨通道操作,根据该向量控制的顺序重新排列参数向量的通道元素。对于该向量的每个通道N
,以及该向量中通道值I=this.lane(N)
,输出通道N
获取参数向量在通道I
处的值。通过这种方式,结果仅包含存储在参数向量v
中的值,但呈现的顺序取决于this
中的索引值。结果与表达式v.rearrange(this.toShuffle())
相同。- 指定者:
-
selectFrom
在类Vector<Float>
中 - 参数:
-
v
- 提供结果值的向量 - 返回:
-
v
的通道元素重新排列 - 参见:
-
selectFrom
使用存储在该向量的通道中的索引值,根据掩码控制,组装存储在第二个向量中的值。因此,第二个向量充当一个表,其元素由当前向量中的索引选择。在掩码中未设置的通道将接收零而不是来自表的值。这是一个跨通道操作,根据该向量和掩码控制重新排列参数向量的通道元素。结果与表达式v.rearrange(this.toShuffle(), m)
相同。- 指定者:
-
selectFrom
在类Vector<Float>
中 - 参数:
-
s
- 提供结果值的向量 -
m
- 控制从v
选择的掩码 - 返回:
-
v
的通道元素重新排列 - 参见:
-
fma
将该向量乘以第二个输入向量,并将结果与第三个向量相加。中间结果使用扩展精度,避免每个操作的四舍五入可能导致的精度损失。结果在数值上接近于this.mul(b).add(c)
,通常更接近真实的数学结果。这是一个按通道运算的三元操作,对每个通道应用符合Math.fma(a,b,c)
规范的操作。该操作被调整为将操作数和结果转换,具体是将float
操作数扩展为double
操作数,并将double
结果缩小为float
结果。该方法也等同于表达式lanewise
(
FMA
, b, c)
。- 参数:
-
b
- 第二个输入向量,提供乘数值 -
c
- 第三个输入向量,提供加数值 - 返回:
- 该向量与第二个输入向量的乘积与第三个输入向量相加的结果,使用扩展精度进行中间结果计算
- 参见:
-
fma
将该向量乘以标量乘数,并将结果与标量加数相加。中间结果使用扩展精度,避免每个操作的四舍五入可能导致的精度损失。结果在数值上接近于this.mul(b).add(c)
,通常更接近真实的数学结果。这是一个按通道运算的三元操作,对每个通道应用符合Math.fma(a,b,c)
规范的操作。该操作被调整为将操作数和结果转换,具体是将float
操作数扩展为double
操作数,并将double
结果缩小为float
结果。该方法也等同于表达式lanewise
(
FMA
, b, c)
。- 参数:
-
b
- 标量乘数 -
c
- 标量加数 - 返回:
- 该向量与标量乘数相乘后与标量加数相加的结果,使用扩展精度进行中间结果计算
- 参见:
-
reduceLanes
返回从此向量的所有通道累积的值。这是一种关联的跨通道归约操作,将指定的操作应用于所有通道元素。一些归约操作不支持其操作数的任意重新排序,但由于它们的有用性而包含在此处。
- 在
FIRST_NONZERO
的情况下,归约将返回来自最低编号的非零通道的值。(与MAX
和MIN
一样,浮点负零-0.0
被视为与默认值正零不同的值。因此,第一个非零通道归约可能会返回-0.0
,即使存在非零通道值。) - 在
ADD
和MUL
的情况下,精确结果将反映对操作的任意操作顺序的选择,这甚至可能随时间变化。有关详细信息,请参见浮点向量上的操作部分。 - 所有其他归约操作都是完全可交换和关联的。实现可以选择任何处理顺序,但它将始终产生相同的结果。
- 参数:
-
op
- 用于组合通道值的操作 - 返回:
- 累积结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
- 在
-
reduceLanes
返回从此向量的选定通道累积的值,由掩码控制。这是一种关联的跨通道归约操作,将指定的操作应用于所选通道元素。如果没有选择元素,则返回特定于操作的标识值。
- 如果操作是
ADD
或FIRST_NONZERO
,则标识值为正零,默认的float
值。 - 如果操作是
MUL
,则标识值为一。 - 如果操作是
MAX
,则标识值为Float.NEGATIVE_INFINITY
。 - 如果操作是
MIN
,则标识值为Float.POSITIVE_INFINITY
。
一些归约操作不支持其操作数的任意重新排序,但由于它们的有用性而包含在此处。
- 在
FIRST_NONZERO
的情况下,归约将返回来自最低编号的非零通道的值。(与MAX
和MIN
一样,浮点负零-0.0
被视为与默认值正零不同的值。因此,第一个非零通道归约可能会返回-0.0
,即使存在非零通道值。) - 在
ADD
和MUL
的情况下,精确结果将反映对操作的任意操作顺序的选择,这甚至可能随时间变化。有关详细信息,请参见浮点向量上的操作部分。 - 所有其他归约操作都是完全可交换和关联的。实现可以选择任何处理顺序,但它将始终产生相同的结果。
- 参数:
-
op
- 用于组合通道值的操作 -
m
- 控制通道选择的掩码 - 返回:
- 从所选通道值累积的减少结果
- 抛出:
-
UnsupportedOperationException
- 如果此向量不支持请求的操作 - 参见:
- 如果操作是
-
lane
public abstract float lane(int i) 获取通道索引i
处的通道元素- 参数:
-
i
- 通道索引 - 返回:
-
通道索引
i
处的通道元素 - 抛出:
-
IllegalArgumentException
- 如果索引超出范围(< 0 || >= length()
)
-
withLane
用值e
替换此向量在通道索引i
处的通道元素。这是一个跨通道操作,并且表现为将此向量与广播e
和一个在通道索引i
处设置了一个通道的掩码的输入向量混合的结果。- 参数:
-
i
- 要替换的通道元素的通道索引 -
e
- 要放置的值 - 返回:
-
用值
e
替换此向量在通道索引i
处的通道元素的结果。 - 抛出:
-
IllegalArgumentException
- 如果索引超出范围(< 0 || >= length()
)
-
toArray
public final float[] toArray()返回一个包含所有通道值的float[]
类型数组。数组长度与向量长度相同。数组元素按通道顺序存储。此方法的行为就像将此向量存储到分配的数组中(使用
intoArray
)并返回数组一样:float[] a = new float[this.length()]; this.intoArray(a, 0); return a;
-
toIntArray
public final int[] toIntArray()返回一个包含所有通道值的int[]
数组,转换为类型int
。数组长度与向量长度相同。数组元素按通道顺序转换并存储。如果向量元素类型为float
或double
,当通道包含分数或超出范围值时,此操作可能失败。如果任何向量通道值无法表示为int
,则会抛出异常。- 指定者:
-
toIntArray
在类Vector<Float>
- 返回:
-
包含此向量的通道值的
int[]
数组 - 参见:
-
toLongArray
public final long[] toLongArray()返回一个包含所有通道值的long[]
数组,转换为类型long
。数组长度与向量长度相同。数组元素按通道顺序转换并存储。如果向量元素类型为float
或double
,当通道包含分数或超出范围值时,此操作可能失败。如果任何向量通道值无法表示为long
,则会抛出异常。- 指定者:
-
toLongArray
在类Vector<Float>
- 返回:
-
包含此向量的通道值的
long[]
数组 - 参见:
-
toDoubleArray
public final double[] toDoubleArray()返回一个包含所有通道值的double[]
数组,转换为类型double
。数组长度与向量长度相同。数组元素按通道顺序转换并存储。如果向量元素类型为long
,此操作可能会丢失精度。- 指定者:
-
toDoubleArray
在类Vector<Float>
- 实现注意:
-
当此方法用于
FloatVector
类型的向量时,不会丢失精度。 - 返回:
-
包含此向量的通道值的
double[]
数组,可能四舍五入为可表示的double
值 - 参见:
-
fromArray
Loads a vector from an array of typefloat[]
starting at an offset. For each vector lane, whereN
is the vector lane index, the array element at indexoffset + N
is placed into the resulting vector at lane indexN
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array - Returns:
- the vector loaded from an array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector
-
fromArray
public static FloatVector fromArray(VectorSpecies<Float> species, float[] a, int offset, VectorMask<Float> m) Loads a vector from an array of typefloat[]
starting at an offset and using a mask. Lanes where the mask is unset are filled with the default value offloat
(positive zero). For each vector lane, whereN
is the vector lane index, if the mask lane at indexN
is set then the array element at indexoffset + N
is placed into the resulting vector at lane indexN
, otherwise the default element value is placed into the resulting vector at lane indexN
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array -
m
- the mask controlling lane selection - Returns:
- the vector loaded from an array
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector where the mask is set
-
fromArray
public static FloatVector fromArray(VectorSpecies<Float> species, float[] a, int offset, int[] indexMap, int mapOffset) Gathers a new vector composed of elements from an array of typefloat[]
, using indexes obtained by adding a fixedoffset
to a series of secondary offsets from an index map. The index map is a contiguous sequence ofVLENGTH
elements in a second array ofint
s, starting at a givenmapOffset
.For each vector lane, where
N
is the vector lane index, the lane is loaded from the array elementa[f(N)]
, wheref(N)
is the index mapping expressionoffset + indexMap[mapOffset + N]]
.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array, may be negative if relative indexes in the index map compensate to produce a value within the array bounds -
indexMap
- the index map -
mapOffset
- the offset into the index map - Returns:
- the vector loaded from the indexed elements of the array
- Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector - See Also:
-
fromArray
public static FloatVector fromArray(VectorSpecies<Float> species, float[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Float> m) Gathers a new vector composed of elements from an array of typefloat[]
, under the control of a mask, and using indexes obtained by adding a fixedoffset
to a series of secondary offsets from an index map. The index map is a contiguous sequence ofVLENGTH
elements in a second array ofint
s, starting at a givenmapOffset
.For each vector lane, where
N
is the vector lane index, if the lane is set in the mask, the lane is loaded from the array elementa[f(N)]
, wheref(N)
is the index mapping expressionoffset + indexMap[mapOffset + N]]
. Unset lanes in the resulting vector are set to zero.- Parameters:
-
species
- species of desired vector -
a
- the array -
offset
- the offset into the array, may be negative if relative indexes in the index map compensate to produce a value within the array bounds -
indexMap
- the index map -
mapOffset
- the offset into the index map -
m
- the mask controlling lane selection - Returns:
- the vector loaded from the indexed elements of the array
- Throws:
-
IndexOutOfBoundsException
- ifmapOffset+N < 0
or ifmapOffset+N >= indexMap.length
, or iff(N)=offset+indexMap[mapOffset+N]
is an invalid index intoa
, for any laneN
in the vector where the mask is set - See Also:
-
fromMemorySegment
public static FloatVector fromMemorySegment(VectorSpecies<Float> species, MemorySegmentPREVIEW ms, long offset, ByteOrder bo) Loads a vector from a memory segmentPREVIEW starting at an offset into the memory segment. Bytes are composed into primitive lane elements according to the specified byte order. The vector is arranged into lanes according to memory ordering.This method behaves as if it returns the result of calling
fromMemorySegment()
PREVIEW as follows:var m = species.maskAll(true); return fromMemorySegment(species, ms, offset, bo, m);
- Parameters:
-
species
- species of desired vector -
ms
- the memory segment -
offset
- the offset into the memory segment -
bo
- the intended byte order - Returns:
- a vector loaded from the memory segment
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N*4 < 0
oroffset+N*4 >= ms.byteSize()
for any laneN
in the vector -
IllegalArgumentException
- if the memory segment is a heap segment that is not backed by abyte[]
array. -
IllegalStateException
- if the memory segment's session is not alive, or if access occurs from a thread other than the thread owning the session. - Since:
- 19
-
fromMemorySegment
public static FloatVector fromMemorySegment(VectorSpecies<Float> species, MemorySegmentPREVIEW ms, long offset, ByteOrder bo, VectorMask<Float> m) Loads a vector from a memory segmentPREVIEW starting at an offset into the memory segment and using a mask. Lanes where the mask is unset are filled with the default value offloat
(positive zero). Bytes are composed into primitive lane elements according to the specified byte order. The vector is arranged into lanes according to memory ordering.The following pseudocode illustrates the behavior:
var slice = ms.asSlice(offset); float[] ar = new float[species.length()]; for (int n = 0; n < ar.length; n++) { if (m.laneIsSet(n)) { ar[n] = slice.getAtIndex(ValuaLayout.JAVA_FLOAT.withByteAlignment(1), n); } } FloatVector r = FloatVector.fromArray(species, ar, 0);
- Implementation Note:
- This operation is likely to be more efficient if the specified byte order is the same as the platform native order, since this method will not need to reorder the bytes of lane values.
- Parameters:
-
species
- species of desired vector -
ms
- the memory segment -
offset
- the offset into the memory segment -
bo
- the intended byte order -
m
- the mask controlling lane selection - Returns:
- a vector loaded from the memory segment
- Throws:
-
IndexOutOfBoundsException
- ifoffset+N*4 < 0
oroffset+N*4 >= ms.byteSize()
for any laneN
in the vector where the mask is set -
IllegalArgumentException
- if the memory segment is a heap segment that is not backed by abyte[]
array. -
IllegalStateException
- if the memory segment's session is not alive, or if access occurs from a thread other than the thread owning the session. - Since:
- 19
-
intoArray
public final void intoArray(float[] a, int offset) Stores this vector into an array of typefloat[]
starting at an offset.For each vector lane, where
N
is the vector lane index, the lane element at indexN
is stored into the array elementa[offset+N]
.- Parameters:
-
a
- the array, of typefloat[]
-
offset
- the offset into the array - Throws:
-
IndexOutOfBoundsException
- ifoffset+N < 0
oroffset+N >= a.length
for any laneN
in the vector
-
intoArray
将此向量存储到一个float[]
类型的数组中,从偏移量开始,并使用掩码。对于每个向量通道,其中
N
是向量通道索引,索引为N
的通道元素存储到数组元素a[offset+N]
中。如果N
处的掩码通道未设置,则相应的数组元素a[offset+N]
保持不变。对于设置了掩码的通道,会进行数组范围检查。未设置掩码的通道不会被存储,也不需要对应于
a
的合法元素。也就是说,未设置的通道可能对应于小于零或超出数组末尾的数组索引。- 参数:
-
a
- 数组,类型为float[]
-
offset
- 数组中的偏移量 -
m
- 控制通道存储的掩码 - 抛出:
-
IndexOutOfBoundsException
- 如果对于任何设置了掩码的向量通道N
,offset+N < 0
或offset+N >= a.length
-
intoArray
public final void intoArray(float[] a, int offset, int[] indexMap, int mapOffset) 将此向量散射到一个float[]
类型的数组中,使用通过将固定offset
与来自索引映射的一系列次要偏移相加而获得的索引。索引映射是第二个int
数组中从给定mapOffset
开始的VLENGTH
元素的连续序列。对于每个向量通道,其中
N
是向量通道索引,索引为N
的通道元素存储到数组元素a[f(N)]
中,其中f(N)
是索引映射表达式offset + indexMap[mapOffset + N]]
。- 参数:
-
a
- 数组 -
offset
- 与索引映射偏移量相结合的偏移量 -
indexMap
- 索引映射 -
mapOffset
- 索引映射的偏移量 - 抛出:
-
IndexOutOfBoundsException
- 如果对于任何设置了掩码的向量通道N
,mapOffset+N < 0
或mapOffset+N >= indexMap.length
,或者f(N)=offset+indexMap[mapOffset+N]
是a
中的无效索引 - 参见:
-
intoArray
public final void intoArray(float[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Float> m) 将此向量散射到一个float[]
类型的数组中,受掩码控制,并使用通过将固定offset
与来自索引映射的一系列次要偏移相加而获得的索引。索引映射是第二个int
数组中从给定mapOffset
开始的VLENGTH
元素的连续序列。对于每个向量通道,其中
N
是向量通道索引,如果索引为N
的掩码通道已设置,则将索引为N
的通道元素存储到数组元素a[f(N)]
中,其中f(N)
是索引映射表达式offset + indexMap[mapOffset + N]]
。- 参数:
-
a
- 数组 -
offset
- 与索引映射偏移量相结合的偏移量 -
indexMap
- 索引映射 -
mapOffset
- 索引映射的偏移量 -
m
- 掩码 - 抛出:
-
IndexOutOfBoundsException
- 如果对于任何设置了掩码的向量通道N
,mapOffset+N < 0
或mapOffset+N >= indexMap.length
,或者f(N)=offset+indexMap[mapOffset+N]
是a
中的无效索引 - 参见:
-
intoMemorySegment
将此向量存储到一个预览从偏移量开始使用显式字节顺序的MemorySegment
中。根据指定的字节顺序从原始通道元素中提取字节。通道根据其内存顺序进行存储。
此方法的行为就好像调用
intoMemorySegment()
预览如下:var m = maskAll(true); intoMemorySegment(ms, offset, bo, m);
- 指定者:
-
intoMemorySegment
在类Vector<Float>
- 参数:
-
ms
- 内存段 -
offset
- 内存段中的偏移量 -
bo
- 预期的字节顺序 - 自:
- 19
-
intoMemorySegment
public final void intoMemorySegment(MemorySegmentPREVIEW ms, long offset, ByteOrder bo, VectorMask<Float> m) 将此向量存储到一个预览从偏移量开始使用显式字节顺序和掩码的MemorySegment
中。根据指定的字节顺序从原始通道元素中提取字节。通道根据其内存顺序进行存储。
以下伪代码说明了行为,其中
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<Float>
- 参数:
-
ms
- 内存段 -
offset
- 内存段中的偏移量 -
bo
- 预期的字节顺序 -
m
- 控制通道选择的掩码 - 自:
- 19
-
reinterpretAsBytes
将此向量视为具有相同形状和内容但通道类型为byte
的向量,其中字节根据小端顺序从通道中提取。这是一个方便的方法,用于表达式reinterpretShape(species().withLanes(byte.class))
。它可以被视为将字节从同一向量中的通道合并为较大通道的逆操作,例如Vector.reinterpretAsInts()
。- 指定者:
-
reinterpretAsBytes
在类Vector<Float>
- 返回:
-
一个具有相同形状和信息内容的
ByteVector
- 参见:
-
viewAsIntegralLanes
将此向量视为具有相同形状、长度和内容,但通道类型不是浮点类型的向量。这是对通道值进行逐通道重新解释的转换。因此,此方法不会更改VSHAPE
或VLENGTH
,向量的位内容也不会更改。如果向量的ETYPE
已经是整数类型,则返回相同的向量。此方法返回以下表达式的值:convert(conv,0)
,其中conv
是VectorOperators.Conversion.ofReinterpret(E.class,F.class)
,F
是与E
大小相同的非浮点类型。- 指定者:
-
viewAsIntegralLanes
在类Vector<Float>
- 返回:
- 重新解释为非浮点数的原始向量
- 参见:
-
viewAsFloatingLanes
将此向量视为具有相同形状、长度和内容的向量,但是具有浮点类型的车道类型。这是对车道值进行的重新解释转换。因此,此方法不会更改VSHAPE
或VLENGTH
,向量的位内容也不会更改。如果向量的ETYPE
已经是浮点类型,则返回相同的向量。如果向量的元素大小与任何浮点类型大小不匹配,则会抛出IllegalArgumentException
。此方法返回此表达式的值:convert(conv,0)
,其中conv
是VectorOperators.Conversion.ofReinterpret(E.class,F.class)
,F
是与E
大小相同的浮点类型,如果存在。- 指定者:
-
viewAsFloatingLanes
在类中Vector<Float>
- 返回:
- 重新解释为浮点数的原始向量
- 参见:
-
toString
返回此向量的字符串表示形式,形式为"[0,1,2...]"
,报告此向量的车道值,按车道顺序。生成的字符串就像调用Arrays.toString()
一样,适用于由this.toArray()
返回的float
数组。 -
equals
指示此向量是否与其他某个对象相同。只有当两个向量具有相同的种类和相同的车道值,且顺序相同时,它们才是相同的。车道值的比较就像调用
Arrays.equals()
一样,适用于两个向量上的toArray()
返回的数组。 -
hashCode
public final int hashCode()返回此向量的哈希码值,基于车道值和向量种类。 -
species
从类中复制的描述:Vector
返回此向量的种类。 -
check
从类中复制的描述:Vector
检查此向量是否具有给定的种类,并返回此向量不变。效果类似于此伪代码:species == species() ? this : throw new ClassCastException()
。 -
check
检查此向量是否具有给定的元素类型,并返回此向量不变。效果类似于此伪代码:elementType == species().elementType() ? this : throw new ClassCastException()
。 -
maskAll
返回与此向量相同种类的掩码,其中每个车道根据给定的单个布尔值设置或取消设置,该值广播到所有车道。此方法返回此表达式的值:
species().maskAll(bit)
。 -
reinterpretAsShorts
将此向量重新解释为具有相同形状和内容但车道类型为short
的向量,其中车道根据小端顺序从连续字节组装而成。这是一个方便的方法,表达式为reinterpretShape(species().withLanes(short.class))
。它可以被视为Vector.reinterpretAsBytes()
的逆操作。- 指定者:
-
reinterpretAsShorts
在类中Vector<E>
- 返回:
-
具有相同形状和信息内容的
ShortVector
-
reinterpretAsInts
将此向量重新解释为具有相同形状和内容但车道类型为int
的向量,其中车道根据小端顺序从连续字节组装而成。这是一个方便的方法,表达式为reinterpretShape(species().withLanes(int.class))
。它可以被视为Vector.reinterpretAsBytes()
的逆操作。- 指定者:
-
reinterpretAsInts
在类中Vector<E>
- 返回:
-
具有相同形状和信息内容的
IntVector
-
reinterpretAsLongs
将此向量重新解释为具有相同形状和内容但车道类型为long
的向量,其中车道根据小端顺序从连续字节组装而成。这是一个方便的方法,表达式为reinterpretShape(species().withLanes(long.class))
。它可以被视为Vector.reinterpretAsBytes()
的逆操作。- 指定者:
-
reinterpretAsLongs
在类中Vector<E>
- 返回:
-
具有相同形状和信息内容的
LongVector
-
reinterpretAsFloats
将此向量重新解释为具有相同形状和内容但车道类型为float
的向量,其中车道根据小端顺序从连续字节组装而成。这是一个方便的方法,表达式为reinterpretShape(species().withLanes(float.class))
。它可以被视为Vector.reinterpretAsBytes()
的逆操作。- 指定者:
-
reinterpretAsFloats
在类Vector<E>
中 - 返回:
-
一个具有相同形状和信息内容的
FloatVector
-
reinterpretAsDoubles
将此向量重新解释为具有相同形状和内容但具有double
车道类型的向量,其中车道根据小端顺序从连续字节组装而成。这是一个方便的方法,用于表达式reinterpretShape(species().withLanes(double.class))
。它可以被视为Vector.reinterpretAsBytes()
的逆操作。- 指定者:
-
reinterpretAsDoubles
在类Vector<E>
中 - 返回:
-
一个具有相同形状和信息内容的
DoubleVector
-
convert
将此向量转换为具有相同形状和新元素类型的向量,将车道值从当前ETYPE
转换为新车道类型(此处称为FTYPE
),根据指定的转换。这是一个逐车道形状不变的操作,它将从输入向量中的ETYPE
值复制到结果中的相应FTYPE
值。根据所选的转换,此操作可能会扩展或收缩其逻辑结果,此时非零的part
数可以进一步控制将逻辑结果选择和引导到物理输出向量中。每个特定的转换在类
VectorOperators
中由一个转换常量描述。每个转换操作符都有指定的域类型和范围类型。域类型必须与输入向量的车道类型完全匹配,而范围类型确定输出向量的车道类型。根据其域类型的位大小是否等于、小于或大于其范围类型的位大小,转换操作符可以被分类为就地、扩展或收缩。
独立地,转换操作还可以被分类为重新解释或值转换,具体取决于转换是保持表示位不变还是更改表示位以保留(部分或全部)输入值的逻辑值。
如果重新解释的转换收缩,它将截断输入的高位。如果它扩展,当没有相应的输入位时,它将用零位填充输出的高位。
扩展转换如
S2I
(short
值到int
)将取一个标量值并以更大的格式表示它(始终带有一些信息冗余)。收缩转换如D2F
(double
值到float
)将取一个标量值并以较小的格式表示它(始终带有一些信息丢失)。一些就地转换也可能包括信息丢失,例如L2D
(long
值到double
)或F2I
(float
值到int
)。重新解释的就地转换不会丢失信息,除非位值在某种程度上在输出类型中不合法。转换NaN
的位模式可能会丢弃NaN
的尾数中的位。这种分类很重要,因为除非另有说明,转换操作永远不会改变向量形状,无论它们如何改变车道大小。因此,扩展转换无法将其所有结果存储在输出向量中,因为输出向量具有更少的车道,但车道更大,以便具有与输入相同的总位大小。同样,收缩转换必须将其相对较小的结果存储到输出向量的一部分车道中,将未使用的车道默认为零。
例如,从
byte
到long
的转换(M=8
)将丢弃87.5%的输入值,以便将剩余的12.5%转换为输出向量中宽敞的long
车道。逆转换将转换回所有大结果,但将浪费输出向量中87.5%的车道。就地转换(M=1
)将在一个输出向量中提供所有结果,而不浪费车道。为了管理这些扩展和收缩的细节,一个非零的
part
参数选择扩展的部分结果,或将收缩的结果引导到相应的位置,如下所示:- 通过
M
扩展:part
必须在范围[0..M-1]
内,并选择从原始车道在part*VLENGTH/M
处开始的VLENGTH/M
输入车道块。VLENGTH/M
输出车道表示转换的整体逻辑结果的部分切片,填充整个物理输出向量。 - 通过
M
收缩:part
必须在范围[-M+1..0]
内,并将所有VLENGTH
输入车道引导到位于原始车道-part*VLENGTH
处的输出。共有VLENGTH*M
输出车道,那些不包含转换后的输入值的车道将填充为零。一组这样的输出向量,其中逻辑结果部分引导到不相交的块,可以使用按位或或(对于浮点数)
FIRST_NONZERO
操作符重新组装。 - 就地(
M=1
):part
必须为零。两个向量具有相同的VLENGTH
。结果始终位于零的原始车道处。
此方法是更一般但使用频率较低的形状更改方法
convertShape()
的受限版本。此方法的结果与表达式this.convertShape(conv, rsp, this.broadcast(part))
相同,其中输出species为rsp=this.species().withLanes(FTYPE.class)
。 - 通过
-
castShape
将一个向量从一种车道类型转换为另一种,根据需要重新塑造车道大小。此方法返回此表达式的值:convertShape(conv,rsp,part)
,其中conv
为VectorOperators.Conversion.ofCast(E.class,F.class)
。如果旧物种和新物种具有不同的形状,则这是一个形状更改操作,可能具有特殊的实现成本。
-
convertShape
public abstract <F> Vector<F> convertShape(VectorOperators.Conversion<Float, F> conv, VectorSpecies<F> rsp, int part) 将此向量转换为给定种类、形状和元素类型的向量,根据指定的转换将当前ETYPE
的车道值转换为新的车道类型(此处称为FTYPE
)。这是一种逐车道操作,将输入向量中的ETYPE
值复制到结果中对应的FTYPE
值中。如果旧种类和新种类具有相同的形状,则行为与更简单的、形状不变的方法
convert()
完全相同。在这种情况下,应该使用更简单的方法convert()
,以便更容易理解代码。否则,这是一种改变形状的操作,可能具有特殊的实现成本。由于形状变化和车道大小变化的综合效果,输入和输出种类可能具有不同的车道计数,导致扩展或收缩。在这种情况下,非零的
part
参数从扩展的逻辑结果中选择部分结果,或将收缩的逻辑结果的结果导入到所需输出种类的物理输出向量中。以下伪代码说明了此方法对于原位、扩展和收缩转换的行为。(此伪代码也适用于形状不变的方法,但对输出种类有形状限制。)请注意,对于任何特定的转换运算符和形状组合,只有三个代码路径中的一个与之相关。
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) { // 原位 assert part == 0; //否则AIOOBE physical = logical; } else if (domlen > ranlen) { // 扩展 int M = domlen / ranlen; assert 0 <= part && part < M; //否则AIOOBE int origin = part * ranlen; physical = Arrays.copyOfRange(logical, origin, origin + ranlen); } else { // (domlen < ranlen) // 收缩 int M = ranlen / domlen; assert 0 >= part && part > -M; //否则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
-
FloatVector
。