Struct ha_ndarray::ArrayOp
source · pub struct ArrayOp<Op> { /* private fields */ }
Expand description
An array operation
Implementations§
source§impl<Op> ArrayOp<Op>
impl<Op> ArrayOp<Op>
sourcepub fn new(shape: Shape, op: Op) -> Self
pub fn new(shape: Shape, op: Op) -> Self
Construct a new array operation.
Examples found in repository?
examples/backprop.rs (line 12)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
fn main() -> Result<(), Error> {
let context = Context::default()?;
let weights = RandomNormal::with_context(context.clone(), 2)?;
let weights = ArrayOp::new(vec![2, 1], weights) - 0.5;
let mut weights = ArrayBase::<Arc<RwLock<Buffer<f32>>>>::copy(&weights)?;
let inputs = RandomUniform::with_context(context, vec![NUM_EXAMPLES, 2])?;
let inputs = ArrayOp::new(vec![NUM_EXAMPLES, 2], inputs) * 2.;
let inputs = ArrayBase::<Arc<Buffer<f32>>>::copy(&inputs)?;
let inputs_bool = inputs.clone().lt_scalar(1.0)?;
let inputs_left = inputs_bool
.clone()
.slice(vec![(0..NUM_EXAMPLES).into(), 0.into()])?;
let inputs_right = inputs_bool.slice(vec![(0..NUM_EXAMPLES).into(), 1.into()])?;
let labels = inputs_left
.and(inputs_right)?
.expand_dims(vec![1])?
.cast()?;
let labels = ArrayBase::<Buffer<f32>>::copy(&labels)?;
let output = inputs.matmul(weights.clone())?;
let error = labels.sub(output)?;
let loss = error.clone().pow_scalar(2.)?;
let d_loss = error * 2.;
let weights_t = weights.clone().transpose(None)?;
let gradient = d_loss.matmul(weights_t)?;
let deltas = gradient.sum(vec![0], false)?.expand_dims(vec![1])?;
let new_weights = weights.clone().add(deltas * LEARNING_RATE)?;
let mut i = 0;
loop {
let loss = ArrayBase::<Buffer<f32>>::copy(&loss)?;
if loss.clone().lt_scalar(1.0)?.all()? {
return Ok(());
}
if i % 100 == 0 {
println!(
"loss: {} (max {})",
loss.clone().sum_all()?,
loss.clone().max_all()?
);
}
assert!(!loss.clone().is_inf()?.any()?, "divergence at iteration {i}");
assert!(!loss.is_nan()?.any()?, "unstable by iteration {i}");
weights.write(&new_weights)?;
i += 1;
}
}
Trait Implementations§
source§impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayBase<O>> for ArrayOp<Op>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayOp<O>> for ArrayBase<Buf>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayOp<O>> for ArrayOp<Op>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayOp<O>> for ArrayOp<Op>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayOp<O>> for ArraySlice<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayOp<O>> for ArraySlice<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayOp<O>> for ArrayView<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayOp<O>> for ArrayView<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArraySlice<O>> for ArrayOp<Op>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArraySlice<O>> for ArrayOp<Op>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayView<O>> for ArrayOp<Op>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Add<ArrayView<O>> for ArrayOp<Op>where ArrayView<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayBase<O>> for ArrayOp<Op>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayOp<O>> for ArrayBase<Buf>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayOp<O>> for ArrayOp<Op>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayOp<O>> for ArrayOp<Op>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayOp<O>> for ArraySlice<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayOp<O>> for ArraySlice<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayOp<O>> for ArrayView<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayOp<O>> for ArrayView<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArraySlice<O>> for ArrayOp<Op>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArraySlice<O>> for ArrayOp<Op>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayView<O>> for ArrayOp<Op>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayView<O>> for ArrayOp<Op>where ArrayView<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayBase<O>> for ArrayOp<Op>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayOp<O>> for ArrayBase<Buf>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayOp<O>> for ArrayOp<Op>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayOp<O>> for ArrayOp<Op>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayOp<O>> for ArraySlice<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayOp<O>> for ArraySlice<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayOp<O>> for ArrayView<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayOp<O>> for ArrayView<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArraySlice<O>> for ArrayOp<Op>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArraySlice<O>> for ArrayOp<Op>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayView<O>> for ArrayOp<Op>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayView<O>> for ArrayOp<Op>where ArrayView<O>: NDArray<DType = T>,
source§impl<Op: Op> NDArrayRead for ArrayOp<Op>
impl<Op: Op> NDArrayRead for ArrayOp<Op>
source§fn read(&self, queue: &Queue) -> Result<BufferConverter<'_, Op::Out>, Error>
fn read(&self, queue: &Queue) -> Result<BufferConverter<'_, Op::Out>, Error>
Read the value of this
NDArray
.source§fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>
fn read_value(&self, coord: &[usize]) -> Result<Self::DType, Error>
Read the value at one
coord
in this NDArray
.source§fn to_host(
&self,
queue: &Queue
) -> Result<SliceConverter<'_, Self::DType>, Error>
fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>
Read the value of this
NDArray
as a SliceConverter
in main memorysource§impl<Op: Op> NDArrayTransform for ArrayOp<Op>
impl<Op: Op> NDArrayTransform for ArrayOp<Op>
§type Slice = ArraySlice<ArrayOp<Op>>
type Slice = ArraySlice<ArrayOp<Op>>
The type returned by
slice
source§fn broadcast(self, shape: Shape) -> Result<Self::Broadcast, Error>
fn broadcast(self, shape: Shape) -> Result<Self::Broadcast, Error>
Broadcast this array into the given
shape
.source§fn expand_dims(self, axes: Vec<usize>) -> Result<Self::Expand, Error>
fn expand_dims(self, axes: Vec<usize>) -> Result<Self::Expand, Error>
Expand the given
axes
of this array.source§fn reshape(self, shape: Shape) -> Result<Self::Reshape, Error>
fn reshape(self, shape: Shape) -> Result<Self::Reshape, Error>
Reshape this array into the given
shape
.source§impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayBase<O>> for ArrayOp<Op>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayOp<O>> for ArrayBase<Buf>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayOp<O>> for ArrayOp<Op>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayOp<O>> for ArrayOp<Op>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayOp<O>> for ArraySlice<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayOp<O>> for ArraySlice<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayOp<O>> for ArrayView<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayOp<O>> for ArrayView<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArraySlice<O>> for ArrayOp<Op>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArraySlice<O>> for ArrayOp<Op>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayView<O>> for ArrayOp<Op>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayView<O>> for ArrayOp<Op>where ArrayView<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArrayBase<O>> for ArrayOp<Op>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArrayOp<O>> for ArrayBase<Buf>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArrayOp<O>> for ArrayOp<Op>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArrayOp<O>> for ArrayOp<Op>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayOp<O>> for ArraySlice<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayOp<O>> for ArraySlice<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayOp<O>> for ArrayView<A>where
ArrayOp<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayOp<O>> for ArrayView<A>where ArrayOp<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArraySlice<O>> for ArrayOp<Op>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArraySlice<O>> for ArrayOp<Op>where ArraySlice<O>: NDArray<DType = T>,
Auto Trait Implementations§
impl<Op> RefUnwindSafe for ArrayOp<Op>where Op: RefUnwindSafe,
impl<Op> Send for ArrayOp<Op>where Op: Send,
impl<Op> Sync for ArrayOp<Op>where Op: Sync,
impl<Op> Unpin for ArrayOp<Op>where Op: Unpin,
impl<Op> UnwindSafe for ArrayOp<Op>where Op: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<A> MatrixMath for Awhere
A: NDArray + Debug,
impl<A> MatrixMath for Awhere A: NDArray + Debug,
source§impl<T, A, O> NDArrayBoolean<O> for Awhere
T: CDatatype,
A: NDArray<DType = T>,
O: NDArray<DType = T>,
impl<T, A, O> NDArrayBoolean<O> for Awhere T: CDatatype, A: NDArray<DType = T>, O: NDArray<DType = T>,
source§impl<T, A> NDArrayBooleanScalar for Awhere
T: CDatatype,
A: NDArray<DType = T>,
impl<T, A> NDArrayBooleanScalar for Awhere T: CDatatype, A: NDArray<DType = T>,
source§fn and_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>
fn and_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>
Construct a boolean and operation with the
other
value.source§fn or_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>
fn or_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>
Construct a boolean or operation with the
other
value.source§fn xor_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>
fn xor_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayBooleanScalar<Self, Self::DType>>, Error>
Construct a boolean xor operation with the
other
value.source§impl<A> NDArrayCast for Awhere
A: NDArray,
impl<A> NDArrayCast for Awhere A: NDArray,
source§impl<A, O> NDArrayCompare<O> for Awhere
A: NDArray,
O: NDArray<DType = <A as NDArray>::DType> + NDArray,
impl<A, O> NDArrayCompare<O> for Awhere A: NDArray, O: NDArray<DType = <A as NDArray>::DType> + NDArray,
source§fn eq(
self,
other: O
) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
fn eq( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
Construct an equality comparison with the
other
array.source§fn gt(
self,
other: O
) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
fn gt( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
Construct a greater-than comparison with the
other
array.source§fn ge(
self,
other: O
) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
fn ge( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
Construct an equal-or-greater-than comparison with the
other
array.source§fn lt(
self,
other: O
) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
fn lt( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>
Construct an equal-or-less-than comparison with the
other
array.source§impl<A> NDArrayCompareScalar for Awhere
A: NDArray,
impl<A> NDArrayCompareScalar for Awhere A: NDArray,
source§fn eq_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
fn eq_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
Construct an equality comparison with the
other
value.source§fn gt_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
fn gt_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
Construct a greater-than comparison with the
other
value.source§fn ge_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
fn ge_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
Construct an equal-or-greater-than comparison with the
other
value.source§fn lt_scalar(
self,
other: Self::DType
) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
fn lt_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>
Construct a less-than comparison with the
other
value.source§impl<A> NDArrayMath for Awhere
A: NDArray,
impl<A> NDArrayMath for Awhere A: NDArray,
source§fn add<O>(
self,
rhs: O
) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where
O: NDArray<DType = Self::DType> + Sized,
fn add<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,
Construct an addition operation with the given
rhs
.source§fn checked_div<O>(
self,
rhs: O
) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where
O: NDArray<DType = Self::DType> + Sized,
fn checked_div<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,
Construct a division operation with the given
rhs
which will return an error if rhs
contains zeros.source§fn div<O>(
self,
rhs: O
) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where
O: NDArray<DType = Self::DType> + Sized,
fn div<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,
Construct a division operation with the given
rhs
which will enter undefined behavior if rhs
contains zeros.source§fn mul<O>(
self,
rhs: O
) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where
O: NDArray<DType = Self::DType> + Sized,
fn mul<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,
Construct an array multiplication operation with the given
rhs
.source§fn rem<O>(
self,
rhs: O
) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where
O: NDArray<DType = Self::DType> + Sized,
fn rem<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,
Construct an array modulo operation with the given
rhs
.source§fn sub<O>(
self,
rhs: O
) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where
O: NDArray<DType = Self::DType> + Sized,
fn sub<O>( self, rhs: O ) -> Result<ArrayOp<ArrayDual<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Sized,
Construct an array subtraction operation with the given
rhs
.source§impl<A> NDArrayMathScalar for Awhere
A: NDArray,
impl<A> NDArrayMathScalar for Awhere A: NDArray,
source§fn add_scalar(
self,
rhs: Self::DType
) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
fn add_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
Construct a scalar addition operation.
source§fn div_scalar(
self,
rhs: Self::DType
) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
fn div_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
Construct a scalar division operation.
source§fn mul_scalar(
self,
rhs: Self::DType
) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
fn mul_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
Construct a scalar multiplication operation.
source§fn rem_scalar(
self,
rhs: Self::DType
) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
fn rem_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
Construct a scalar modulo operation.
source§fn sub_scalar(
self,
rhs: Self::DType
) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
fn sub_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>
Construct a scalar subtraction operation.
source§impl<A> NDArrayReduceAll for Awhere
A: NDArrayRead,
impl<A> NDArrayReduceAll for Awhere A: NDArrayRead,
source§impl<A> NDArrayReduceBoolean for Awhere
A: NDArrayRead,
impl<A> NDArrayReduceBoolean for Awhere A: NDArrayRead,
source§impl<A> NDArrayTrig for Awhere
A: NDArray,
impl<A> NDArrayTrig for Awhere A: NDArray,
source§fn asin(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn asin( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new arcsine operation.
source§fn sin(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn sin( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new sine operation.
source§fn sinh(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn sinh( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new hyperbolic sine operation.
source§fn acos(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn acos( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new arccosine operation.
source§fn cos(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn cos( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new cosine operation.
source§fn cosh(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn cosh( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new hyperbolic cosine operation.
source§fn atan(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
fn atan( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>
Construct a new arctangent operation.
source§impl<A> NDArrayUnary for Awhere
A: NDArray,
impl<A> NDArrayUnary for Awhere A: NDArray,
source§fn abs(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>
fn abs( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>
Construct an absolute value operation.
source§fn exp(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>
fn exp( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>
Construct an exponentiation operation.
source§fn ln(
self
) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>
fn ln( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>
Construct a natural logarithm operation.
source§impl<A> NDArrayWhere for Awhere
A: NDArray<DType = u8> + Debug,
impl<A> NDArrayWhere for Awhere A: NDArray<DType = u8> + Debug,
source§fn cond<T, L, R>(
self,
then: L,
or_else: R
) -> Result<ArrayOp<GatherCond<Self, T, L, R>>, Error>where
T: CDatatype,
L: NDArray<DType = T> + Debug,
R: NDArray<DType = T> + Debug,
Self: Sized,
fn cond<T, L, R>( self, then: L, or_else: R ) -> Result<ArrayOp<GatherCond<Self, T, L, R>>, Error>where T: CDatatype, L: NDArray<DType = T> + Debug, R: NDArray<DType = T> + Debug, Self: Sized,
Construct a boolean selection operation.
The resulting array will return values from
then
where self
is true
and from or_else
where self
is false
.