Struct ha_ndarray::ArrayBase
source · pub struct ArrayBase<Buf> { /* private fields */ }
Expand description
An n-dimensional array with a specific buffer type
Implementations§
source§impl<Buf> ArrayBase<Buf>
impl<Buf> ArrayBase<Buf>
sourcepub fn into_inner(self) -> Buf
pub fn into_inner(self) -> Buf
Destructure this ArrayBase
into its underlying buffer.
source§impl<T: CDatatype> ArrayBase<Vec<T>>
impl<T: CDatatype> ArrayBase<Vec<T>>
pub fn new(shape: Shape, data: Vec<T>) -> Result<Self, Error>
sourcepub fn with_context(
context: Context,
shape: Shape,
data: Vec<T>
) -> Result<Self, Error>
pub fn with_context( context: Context, shape: Shape, data: Vec<T> ) -> Result<Self, Error>
Examples found in repository?
examples/benchmarks.rs (lines 15-19)
8 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
fn broadcast_and_multiply(context: &Context) -> Result<(), Error> {
for m in 0..4 {
let dim = 10usize.pow(m);
let shape = vec![3, dim, 5, 10];
let size = shape.iter().product::<usize>();
let queue = Queue::new(context.clone(), size)?;
let left = ArrayBase::<Vec<_>>::with_context(
context.clone(),
vec![dim, 5, 10],
vec![1.0f64; dim * 5 * 10],
)?;
let right = ArrayBase::<Vec<_>>::with_context(
context.clone(),
vec![3, dim, 1, 10],
vec![1.0f64; 3 * dim * 10],
)?;
println!(
"broadcast and multiply {:?} and {:?} (size {})...",
left, right, size
);
let product = left.broadcast(shape.to_vec())? * right.broadcast(shape)?;
for _ in 0..ITERATIONS {
let start = Instant::now();
product.read(&queue)?;
let duration = start.elapsed();
println!("{:?} us", duration.as_micros());
}
}
Ok(())
}
fn matmul(context: &Context) -> Result<(), Error> {
for m in 1..16usize {
let dim = 2usize.pow(m as u32);
let l = ArrayBase::<Vec<_>>::with_context(
context.clone(),
vec![16 * m, dim],
vec![1.0f32; 16 * m * dim],
)?;
let r = ArrayBase::<Vec<_>>::with_context(
context.clone(),
vec![dim, m * 32],
vec![1.0f32; dim * m * 32],
)?;
let num_ops = 16 * 32 * dim;
println!("matmul {:?} with {:?} ({} ops)", l, r, num_ops);
let x = l.matmul(r)?;
let queue = Queue::new(context.clone(), x.size())?;
for _ in 0..ITERATIONS {
let start = Instant::now();
let _output = x.read(&queue)?;
let duration = start.elapsed();
let rate = num_ops as f32 / duration.as_secs_f32();
println!("{:?} us @ {} M/s", duration.as_micros(), rate / 1_000_000.);
}
}
Ok(())
}
fn reduce_sum_axis(context: &Context) -> Result<(), Error> {
let shape = vec![10, 20, 30, 40, 50];
let size = shape.iter().product();
let queue = Queue::new(context.clone(), size)?;
let x = ArrayBase::<Vec<_>>::with_context(context.clone(), shape, vec![1; size])?;
println!("reduce axis {} of {:?} (size {})", 2, x, x.size());
let reduced = x.sum(vec![2], false)?;
for _ in 0..ITERATIONS {
let start = Instant::now();
let _output = reduced.read(&queue)?;
let duration = start.elapsed();
println!("{:?} ms", duration.as_millis());
}
Ok(())
}
fn reduce_sum_all(context: &Context) -> Result<(), Error> {
for m in 2..8 {
let shape = (1..m).map(|dim| dim * 10).collect::<Vec<usize>>();
let size = shape.iter().product();
let x = ArrayBase::<Arc<Vec<_>>>::with_context(
context.clone(),
shape,
Arc::new(vec![1; size]),
)?;
println!("reduce {:?} (size {})...", x, x.size());
for _ in 0..ITERATIONS {
let start = Instant::now();
let _x = x.clone().sum_all()?;
let duration = start.elapsed();
println!("{:?} us", duration.as_micros());
}
}
Ok(())
}
fn transpose(context: &Context) -> Result<(), Error> {
let shape = vec![10, 20, 30, 40, 50];
let size = shape.iter().product();
let permutation = vec![2, 4, 3, 0, 1];
let queue = Queue::new(context.clone(), size)?;
let x = ArrayBase::<Vec<_>>::with_context(context.clone(), shape, vec![1; size])?;
println!("transpose axes {permutation:?} of {x:?}...");
let transposed = x.transpose(Some(permutation))?;
for _ in 0..ITERATIONS {
let start = Instant::now();
transposed.read(&queue)?;
let duration = start.elapsed();
println!("{:?} ms", duration.as_millis());
}
Ok(())
}
source§impl<T: CDatatype> ArrayBase<Arc<Vec<T>>>
impl<T: CDatatype> ArrayBase<Arc<Vec<T>>>
pub fn new(shape: Shape, data: Arc<Vec<T>>) -> Result<Self, Error>
sourcepub fn with_context(
context: Context,
shape: Shape,
data: Arc<Vec<T>>
) -> Result<Self, Error>
pub fn with_context( context: Context, shape: Shape, data: Arc<Vec<T>> ) -> Result<Self, Error>
Examples found in repository?
examples/benchmarks.rs (lines 103-107)
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
fn reduce_sum_all(context: &Context) -> Result<(), Error> {
for m in 2..8 {
let shape = (1..m).map(|dim| dim * 10).collect::<Vec<usize>>();
let size = shape.iter().product();
let x = ArrayBase::<Arc<Vec<_>>>::with_context(
context.clone(),
shape,
Arc::new(vec![1; size]),
)?;
println!("reduce {:?} (size {})...", x, x.size());
for _ in 0..ITERATIONS {
let start = Instant::now();
let _x = x.clone().sum_all()?;
let duration = start.elapsed();
println!("{:?} us", duration.as_micros());
}
}
Ok(())
}
source§impl<T: CDatatype> ArrayBase<Buffer<T>>
impl<T: CDatatype> ArrayBase<Buffer<T>>
sourcepub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>
pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>
Construct a new ArrayBase
by copying the other
.
Examples found in repository?
examples/backprop.rs (line 32)
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;
}
}
source§impl<T: CDatatype> ArrayBase<Arc<Buffer<T>>>
impl<T: CDatatype> ArrayBase<Arc<Buffer<T>>>
sourcepub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>
pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>
Construct a new ArrayBase
by copying the other
.
Examples found in repository?
examples/backprop.rs (line 17)
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;
}
}
source§impl<T: CDatatype> ArrayBase<Arc<RwLock<Buffer<T>>>>
impl<T: CDatatype> ArrayBase<Arc<RwLock<Buffer<T>>>>
sourcepub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>
pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>
Construct a new ArrayBase
by copying the other
.
Examples found in repository?
examples/backprop.rs (line 13)
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, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArraySlice<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArrayView<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T, LB, RB> Add<ArrayBase<RB>> for ArrayBase<LB>where
T: CDatatype,
LB: BufferInstance<DType = T>,
RB: BufferInstance<DType = T>,
impl<T, LB, RB> Add<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<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, Buf: BufferInstance<DType = T>, O> Add<ArraySlice<O>> for ArrayBase<Buf>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayView<O>> for ArrayBase<Buf>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,
source§impl<T: CDatatype> AsBuffer for ArrayBase<Buffer<T>>
impl<T: CDatatype> AsBuffer for ArrayBase<Buffer<T>>
source§fn as_buffer(&self) -> BufferConverter<'_, Self::DType>
fn as_buffer(&self) -> BufferConverter<'_, Self::DType>
Dereference this
NDArray
as a BufferConverter
.source§fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>
fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>
Dereference this
NDArray
as a BufferConverterMut
.source§impl<T: CDatatype> AsBuffer for ArrayBase<Vec<T>>
impl<T: CDatatype> AsBuffer for ArrayBase<Vec<T>>
source§fn as_buffer(&self) -> BufferConverter<'_, Self::DType>
fn as_buffer(&self) -> BufferConverter<'_, Self::DType>
Dereference this
NDArray
as a BufferConverter
.source§fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>
fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>
Dereference this
NDArray
as a BufferConverterMut
.source§impl<Buf: BufferInstance> Debug for ArrayBase<Buf>
impl<Buf: BufferInstance> Debug for ArrayBase<Buf>
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, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArraySlice<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArrayView<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T, LB, RB> Div<ArrayBase<RB>> for ArrayBase<LB>where
T: CDatatype,
LB: BufferInstance<DType = T>,
RB: BufferInstance<DType = T>,
impl<T, LB, RB> Div<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<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, Buf: BufferInstance<DType = T>, O> Div<ArraySlice<O>> for ArrayBase<Buf>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayView<O>> for ArrayBase<Buf>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayView<O>> for ArrayBase<Buf>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, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArraySlice<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArrayView<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T, LB, RB> Mul<ArrayBase<RB>> for ArrayBase<LB>where
T: CDatatype,
LB: BufferInstance<DType = T>,
RB: BufferInstance<DType = T>,
impl<T, LB, RB> Mul<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<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, Buf: BufferInstance<DType = T>, O> Mul<ArraySlice<O>> for ArrayBase<Buf>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayView<O>> for ArrayBase<Buf>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,
source§impl<Buf: BufferInstance> NDArray for ArrayBase<Buf>
impl<Buf: BufferInstance> NDArray for ArrayBase<Buf>
§type DType = <Buf as BufferInstance>::DType
type DType = <Buf as BufferInstance>::DType
The data type of the elements in this array
source§impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Buffer<T>>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Buffer<T>>>
source§fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>
fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, 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<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Buffer<T>>>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Buffer<T>>>>
source§fn read(&self, queue: &Queue) -> Result<BufferConverter<'_, T>, Error>
fn read(&self, queue: &Queue) -> Result<BufferConverter<'_, T>, 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<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Vec<T>>>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Vec<T>>>>
source§fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>
fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, 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<T: CDatatype> NDArrayRead for ArrayBase<Arc<Vec<T>>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Vec<T>>>
source§fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>
fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, 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<T: CDatatype> NDArrayRead for ArrayBase<Box<dyn BufferRead<DType = T>>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Box<dyn BufferRead<DType = T>>>
source§fn read(
&self,
_queue: &Queue
) -> Result<BufferConverter<'_, Self::DType>, Error>
fn read( &self, _queue: &Queue ) -> Result<BufferConverter<'_, Self::DType>, 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<T: CDatatype> NDArrayRead for ArrayBase<Buffer<T>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Buffer<T>>
source§fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>
fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, 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<T: CDatatype> NDArrayRead for ArrayBase<Vec<T>>
impl<T: CDatatype> NDArrayRead for ArrayBase<Vec<T>>
source§fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, Error>
fn read(&self, _queue: &Queue) -> Result<BufferConverter<'_, T>, 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<Buf: BufferInstance> NDArrayTransform for ArrayBase<Buf>where
Self: NDArrayRead,
impl<Buf: BufferInstance> NDArrayTransform for ArrayBase<Buf>where Self: NDArrayRead,
§type Slice = ArraySlice<ArrayBase<Buf>>
type Slice = ArraySlice<ArrayBase<Buf>>
The type returned by
slice
source§fn broadcast(self, shape: Shape) -> Result<ArrayView<Self>, Error>
fn broadcast(self, shape: Shape) -> Result<ArrayView<Self>, 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, Error>
fn reshape(self, shape: Shape) -> Result<Self, Error>
Reshape this array into the given
shape
.source§impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Buffer<T>>>>
impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Buffer<T>>>>
source§impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Vec<T>>>>
impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Vec<T>>>>
source§impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Buffer<T>>
impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Buffer<T>>
source§impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Vec<T>>
impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Vec<T>>
source§impl<Buf: BufferInstance> Neg for ArrayBase<Buf>
impl<Buf: BufferInstance> Neg for ArrayBase<Buf>
source§impl<Buf: BufferInstance> Not for ArrayBase<Buf>
impl<Buf: BufferInstance> Not for ArrayBase<Buf>
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, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArraySlice<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArrayView<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T, LB, RB> Rem<ArrayBase<RB>> for ArrayBase<LB>where
T: CDatatype,
LB: BufferInstance<DType = T>,
RB: BufferInstance<DType = T>,
impl<T, LB, RB> Rem<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<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, Buf: BufferInstance<DType = T>, O> Rem<ArraySlice<O>> for ArrayBase<Buf>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,
source§impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayView<O>> for ArrayBase<Buf>where
ArrayView<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayView<O>> for ArrayBase<Buf>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, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArraySlice<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArrayView<A>where
ArrayBase<O>: NDArray<DType = T>,
impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,
source§impl<T, LB, RB> Sub<ArrayBase<RB>> for ArrayBase<LB>where
T: CDatatype,
LB: BufferInstance<DType = T>,
RB: BufferInstance<DType = T>,
impl<T, LB, RB> Sub<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<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, Buf: BufferInstance<DType = T>, O> Sub<ArraySlice<O>> for ArrayBase<Buf>where
ArraySlice<O>: NDArray<DType = T>,
impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,
Auto Trait Implementations§
impl<Buf> RefUnwindSafe for ArrayBase<Buf>where Buf: RefUnwindSafe,
impl<Buf> Send for ArrayBase<Buf>where Buf: Send,
impl<Buf> Sync for ArrayBase<Buf>where Buf: Sync,
impl<Buf> Unpin for ArrayBase<Buf>where Buf: Unpin,
impl<Buf> UnwindSafe for ArrayBase<Buf>where Buf: 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
.