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>

source

pub fn into_inner(self) -> Buf

Destructure this ArrayBase into its underlying buffer.

source§

impl<T: CDatatype> ArrayBase<Vec<T>>

source

pub fn new(shape: Shape, data: Vec<T>) -> Result<Self, Error>

source

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>>>

source

pub fn new(shape: Shape, data: Arc<Vec<T>>) -> Result<Self, Error>

source

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>>

source

pub fn new(shape: Shape, data: Buffer<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Buffer<T> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Arc<Buffer<T>>>

source

pub fn new(shape: Shape, data: Arc<Buffer<T>>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Arc<Buffer<T>> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Vec<T>>>>

source

pub fn new(shape: Shape, data: Vec<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Vec<T> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Buffer<T>>>>

source

pub fn new(shape: Shape, data: Buffer<T>) -> Result<Self, Error>

source

pub fn with_context( context: Context, shape: Shape, data: Buffer<T> ) -> Result<Self, Error>

source§

impl<T: CDatatype> ArrayBase<Vec<T>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

Construct a new ArrayBase by copying the other.

source

pub fn as_slice(&self) -> &[T]

Access this ArrayBase’s buffer as a slice.

source§

impl<T: CDatatype> ArrayBase<Arc<Vec<T>>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

Construct a new ArrayBase by copying the other.

source

pub fn as_slice(&self) -> &[T]

Access this ArrayBase’s buffer as a slice.

source§

impl<T: CDatatype> ArrayBase<Arc<RwLock<Vec<T>>>>

source

pub fn copy<O: NDArrayRead<DType = T>>(other: &O) -> Result<Self, Error>

Construct a new ArrayBase by copying the other.

source§

impl<T: CDatatype> ArrayBase<Buffer<T>>

source

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>>>

source

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>>>>

source

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>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Add<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T, LB, RB> Add<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayOp<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArraySlice<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Add<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: ArrayView<O>) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Add<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the + operator.
source§

fn add(self, rhs: T) -> Self::Output

Performs the + operation. Read more
source§

impl<T: CDatatype> AsBuffer for ArrayBase<Buffer<T>>

source§

fn as_buffer(&self) -> BufferConverter<'_, Self::DType>

Dereference this NDArray as a BufferConverter.
source§

fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>

Dereference this NDArray as a BufferConverterMut.
source§

impl<T: CDatatype> AsBuffer for ArrayBase<Vec<T>>

source§

fn as_buffer(&self) -> BufferConverter<'_, Self::DType>

Dereference this NDArray as a BufferConverter.
source§

fn as_buffer_mut(&mut self) -> BufferConverterMut<'_, Self::DType>

Dereference this NDArray as a BufferConverterMut.
source§

impl<Buf: Clone> Clone for ArrayBase<Buf>

source§

fn clone(&self) -> ArrayBase<Buf>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<Buf: BufferInstance> Debug for ArrayBase<Buf>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Div<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Div<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T, LB, RB> Div<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayOp<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArraySlice<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Div<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: ArrayView<O>) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Div<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the / operator.
source§

fn div(self, rhs: T) -> Self::Output

Performs the / operation. Read more
source§

impl<T: CDatatype> From<ArrayBase<Arc<Buffer<T>>>> for Array<T>

source§

fn from(base: ArrayBase<Arc<Buffer<T>>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Arc<Vec<T>>>> for Array<T>

source§

fn from(base: ArrayBase<Arc<Vec<T>>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Box<dyn BufferRead<DType = T>>>> for Array<T>

source§

fn from(base: ArrayBase<Box<dyn BufferRead<DType = T>>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Buffer<T>>> for Array<T>

source§

fn from(base: ArrayBase<Buffer<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Buffer<T>>> for ArrayBase<Arc<Buffer<T>>>

source§

fn from(base: ArrayBase<Buffer<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T>>> for Array<T>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T>>> for ArrayBase<Arc<Buffer<T>>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T>>> for ArrayBase<Arc<Vec<T>>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T>>> for ArrayBase<Box<dyn BufferRead<DType = T>>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype> From<ArrayBase<Vec<T>>> for ArrayBase<Buffer<T>>

source§

fn from(base: ArrayBase<Vec<T>>) -> Self

Converts to this type from the input type.
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Mul<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Mul<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T, LB, RB> Mul<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayOp<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArraySlice<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Mul<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: ArrayView<O>) -> Self::Output

Performs the * operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Mul<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the * operator.
source§

fn mul(self, rhs: T) -> Self::Output

Performs the * operation. Read more
source§

impl<Buf: BufferInstance> NDArray for ArrayBase<Buf>

§

type DType = <Buf as BufferInstance>::DType

The data type of the elements in this array
source§

fn context(&self) -> &Context

Borrow the execution Context of this array.
source§

fn shape(&self) -> &[usize]

Borrow the shape of this array.
source§

fn ndim(&self) -> usize

Return the number of dimensions in this array.
source§

fn size(&self) -> usize

Return the number of elements in this array.
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Buffer<T>>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Buffer<T>>>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<RwLock<Vec<T>>>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Arc<Vec<T>>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Box<dyn BufferRead<DType = T>>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Buffer<T>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<T: CDatatype> NDArrayRead for ArrayBase<Vec<T>>

source§

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>

Read the value at one coord in this NDArray.
source§

fn to_host( &self, queue: &Queue ) -> Result<SliceConverter<'_, Self::DType>, Error>

Read the value of this NDArray as a SliceConverter in main memory
source§

impl<Buf: BufferInstance> NDArrayTransform for ArrayBase<Buf>where Self: NDArrayRead,

§

type Broadcast = ArrayView<ArrayBase<Buf>>

The type returned by broadcast
§

type Expand = ArrayBase<Buf>

The type returned by expand_dims
§

type Reshape = ArrayBase<Buf>

The type returned by reshape
§

type Slice = ArraySlice<ArrayBase<Buf>>

The type returned by slice
§

type Transpose = ArrayView<ArrayBase<Buf>>

The type returned by transpose
source§

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>

Expand the given axes of this array.
source§

fn reshape(self, shape: Shape) -> Result<Self, Error>

Reshape this array into the given shape.
source§

fn slice(self, bounds: Vec<AxisBound>) -> Result<ArraySlice<Self>, Error>

Construct a slice of this array.
source§

fn transpose(self, axes: Option<Vec<usize>>) -> Result<ArrayView<Self>, Error>

Transpose this array according to the given permutation. If no permutation is given, the array axes will be reversed.
source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Buffer<T>>>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

Overwrite this NDArray with the value of the other array.
source§

fn write_value(&mut self, value: T) -> Result<(), Error>

Overwrite this NDArray with a constant scalar value.
source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

Write the given value at the given coord of this NDArray.
source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Arc<RwLock<Vec<T>>>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

Overwrite this NDArray with the value of the other array.
source§

fn write_value(&mut self, value: T) -> Result<(), Error>

Overwrite this NDArray with a constant scalar value.
source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

Write the given value at the given coord of this NDArray.
source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Buffer<T>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

Overwrite this NDArray with the value of the other array.
source§

fn write_value(&mut self, value: T) -> Result<(), Error>

Overwrite this NDArray with a constant scalar value.
source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

Write the given value at the given coord of this NDArray.
source§

impl<'a, T: CDatatype> NDArrayWrite for ArrayBase<Vec<T>>

source§

fn write<O: NDArrayRead<DType = T>>(&mut self, other: &O) -> Result<(), Error>

Overwrite this NDArray with the value of the other array.
source§

fn write_value(&mut self, value: T) -> Result<(), Error>

Overwrite this NDArray with a constant scalar value.
source§

fn write_value_at(&mut self, coord: &[usize], value: T) -> Result<(), Error>

Write the given value at the given coord of this NDArray.
source§

impl<Buf: BufferInstance> Neg for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayUnary<<Buf as BufferInstance>::DType, <<Buf as BufferInstance>::DType as CDatatype>::Neg, ArrayBase<Buf>>>

The resulting type after applying the - operator.
source§

fn neg(self) -> Self::Output

Performs the unary - operation. Read more
source§

impl<Buf: BufferInstance> Not for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayUnary<<Buf as BufferInstance>::DType, u8, ArrayBase<Buf>>>

The resulting type after applying the ! operator.
source§

fn not(self) -> Self::Output

Performs the unary ! operation. Read more
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Rem<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Rem<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T, LB, RB> Rem<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayOp<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArraySlice<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Rem<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: ArrayView<O>) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Rem<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the % operator.
source§

fn rem(self, rhs: T) -> Self::Output

Performs the % operation. Read more
source§

impl<T: CDatatype, Op: Op<Out = T>, O> Sub<ArrayBase<O>> for ArrayOp<Op>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayOp<Op>, ArrayBase<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArraySlice<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArraySlice<A>, ArrayBase<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, A: NDArray<DType = T>, O> Sub<ArrayBase<O>> for ArrayView<A>where ArrayBase<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayView<A>, ArrayBase<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T, LB, RB> Sub<ArrayBase<RB>> for ArrayBase<LB>where T: CDatatype, LB: BufferInstance<DType = T>, RB: BufferInstance<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<LB>, ArrayBase<RB>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayBase<RB>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArrayOp<O>> for ArrayBase<Buf>where ArrayOp<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayOp<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayOp<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArraySlice<O>> for ArrayBase<Buf>where ArraySlice<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArraySlice<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArraySlice<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>, O> Sub<ArrayView<O>> for ArrayBase<Buf>where ArrayView<O>: NDArray<DType = T>,

§

type Output = ArrayOp<ArrayDual<T, ArrayBase<Buf>, ArrayView<O>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: ArrayView<O>) -> Self::Output

Performs the - operation. Read more
source§

impl<T: CDatatype, Buf: BufferInstance<DType = T>> Sub<T> for ArrayBase<Buf>

§

type Output = ArrayOp<ArrayScalar<T, ArrayBase<Buf>>>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: T) -> Self::Output

Performs the - operation. Read more

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> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<A> MatrixMath for Awhere A: NDArray + Debug,

source§

fn diagonal(self) -> Result<ArrayOp<MatDiag<Self>>, Error>where Self: Sized,

Construct an operation to read the diagonal of this matrix or batch of matrices.
source§

fn matmul<O>( self, other: O ) -> Result<ArrayOp<MatMul<Self::DType, Self, O>>, Error>where O: NDArray<DType = Self::DType> + Debug, Self: Sized,

Construct an operation to multiply this matrix or batch of matrices with the other.
source§

impl<T, A, O> NDArrayBoolean<O> for Awhere T: CDatatype, A: NDArray<DType = T>, O: NDArray<DType = T>,

source§

fn and( self, other: O ) -> Result<ArrayOp<ArrayBoolean<Self::DType, Self, O>>, Error>

Construct a boolean and comparison with the other array.
source§

fn or( self, other: O ) -> Result<ArrayOp<ArrayBoolean<Self::DType, Self, O>>, Error>

Construct a boolean or comparison with the other array.
source§

fn xor( self, other: O ) -> Result<ArrayOp<ArrayBoolean<Self::DType, Self, O>>, Error>

Construct a boolean xor comparison with the other array.
source§

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>

Construct a boolean and operation with the other value.
source§

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>

Construct a boolean xor operation with the other value.
source§

impl<A> NDArrayCast for Awhere A: NDArray,

source§

fn cast<O: CDatatype>(self) -> Result<ArrayOp<ArrayCast<Self, O>>, Error>

Construct a new array cast operation.
source§

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>

Construct an equality comparison with the other array.
source§

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>

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>

Construct an equal-or-less-than comparison with the other array.
source§

fn le( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

Construct an equal-or-less-than comparison with the other array.
source§

fn ne( self, other: O ) -> Result<ArrayOp<ArrayCompare<Self::DType, Self, O>>, Error>

Construct an not-equal comparison with the other array.
source§

impl<A> NDArrayCompareScalar for Awhere A: NDArray,

source§

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>

Construct a greater-than comparison with the other value.
source§

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>

Construct a less-than comparison with the other value.
source§

fn le_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>

Construct an equal-or-less-than comparison with the other value.
source§

fn ne_scalar( self, other: Self::DType ) -> Result<ArrayOp<ArrayCompareScalar<Self::DType, Self>>, Error>where Self: Sized,

Construct an not-equal comparison with the other value.
source§

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,

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,

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,

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,

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,

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,

Construct an array subtraction operation with the given rhs.
source§

fn log<O>( self, base: O ) -> Result<ArrayOp<ArrayDualFloat<Self::DType, Self, O>>, Error>where O: NDArray<DType = <Self::DType as CDatatype>::Float> + Sized,

Construct an array logarithm operation with the given base.
source§

fn pow<O>( self, exp: O ) -> Result<ArrayOp<ArrayDualFloat<Self::DType, Self, O>>, Error>where O: NDArray<DType = <Self::DType as CDatatype>::Float> + Sized,

Construct an array exponentiation operation with the given power.
source§

impl<A> NDArrayMathScalar for Awhere A: NDArray,

source§

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>

Construct a scalar division operation.
source§

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>

Construct a scalar modulo operation.
source§

fn sub_scalar( self, rhs: Self::DType ) -> Result<ArrayOp<ArrayScalar<Self::DType, Self>>, Error>

Construct a scalar subtraction operation.
source§

fn log_scalar( self, base: <Self::DType as CDatatype>::Float ) -> Result<ArrayOp<ArrayScalarFloat<Self::DType, Self>>, Error>

Construct a scalar logarithm operation.
source§

fn pow_scalar( self, exp: <Self::DType as CDatatype>::Float ) -> Result<ArrayOp<ArrayScalarFloat<Self::DType, Self>>, Error>

Construct a scalar exponentiation operation.
source§

impl<A> NDArrayReduceAll for Awhere A: NDArrayRead,

source§

fn max_all(&self) -> Result<Self::DType, Error>

Return the maximum element in this array.
source§

fn min_all(&self) -> Result<Self::DType, Error>

Return the minimum element in this array.
source§

fn product_all(&self) -> Result<Self::DType, Error>

Return the product of all elements in this array.
source§

fn sum_all(&self) -> Result<Self::DType, Error>

Return the sum of all elements in this array.
source§

impl<A> NDArrayReduceBoolean for Awhere A: NDArrayRead,

source§

fn all(&self) -> Result<bool, Error>

Return true if this array contains only non-zero elements.
source§

fn any(&self) -> Result<bool, Error>

Return true if this array contains any non-zero elements.
source§

impl<A> NDArrayTrig for Awhere A: NDArray,

source§

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>

Construct a new sine operation.
source§

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>

Construct a new arccosine operation.
source§

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>

Construct a new hyperbolic cosine operation.
source§

fn atan( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

Construct a new arctangent operation.
source§

fn tan( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

Construct a new tangent operation.
source§

fn tanh( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, <Self::DType as CDatatype>::Float, Self>>, Error>

Construct a new hyperbolic tangent operation.
source§

impl<A> NDArrayUnary for Awhere A: NDArray,

source§

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>

Construct an exponentiation operation.
source§

fn ln( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>

Construct a natural logarithm operation.
source§

fn not(self) -> Result<ArrayOp<ArrayUnary<Self::DType, u8, Self>>, Error>

Construct a boolean not operation.
source§

fn round( self ) -> Result<ArrayOp<ArrayUnary<Self::DType, Self::DType, Self>>, Error>

Construct an integer rounding operation.
source§

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,

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.
§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T, Rhs, Output> NumOps<Rhs, Output> for Twhere T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,