Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Getting Started

Installation

Add Tensor Frame to your Cargo.toml:

[dependencies]
tensor_frame = "0.0.1-alpha"

Feature Flags

Tensor Frame supports optional backends via feature flags:

[dependencies]
# CPU only (default)
tensor_frame = "0.0.1-alpha"

# With WGPU support
tensor_frame = { version = "0.0.1-alpha", features = ["wgpu"] }

# With CUDA support  
tensor_frame = { version = "0.0.1-alpha", features = ["cuda"] }

# All backends
tensor_frame = { version = "0.0.1-alpha", features = ["wgpu", "cuda"] }

Basic Usage

Creating Tensors

use tensor_frame::{Tensor, Result};

fn main() -> Result<()> {
    // Create tensors with different initialization
    let zeros = Tensor::zeros(vec![2, 3])?;
    let ones = Tensor::ones(vec![2, 3])?;
    let from_data = Tensor::from_vec(
        vec![1.0, 2.0, 3.0, 4.0], 
        vec![2, 2]
    )?;
    
    // Inspect tensor properties
    println!("Shape: {:?}", zeros.shape().dims());
    println!("Number of elements: {}", zeros.numel());
    println!("Number of dimensions: {}", zeros.ndim());
    
    Ok(())
}

Basic Operations

use tensor_frame::{Tensor, Result};

fn main() -> Result<()> {
    let a = Tensor::from_vec(vec![1.0, 2.0, 3.0, 4.0], vec![2, 2])?;
    let b = Tensor::from_vec(vec![5.0, 6.0, 7.0, 8.0], vec![2, 2])?;
    
    // Element-wise operations
    let sum = (a.clone() + b.clone())?;
    let diff = (a.clone() - b.clone())?;
    let product = (a.clone() * b.clone())?;
    let quotient = (a / b)?;
    
    // Reduction operations
    let total = sum.sum(None)?;
    let average = product.mean(None)?;
    
    println!("Sum result: {:?}", total.to_vec()?);
    
    Ok(())
}

Broadcasting

Tensor Frame supports automatic broadcasting similar to NumPy and PyTorch:

use tensor_frame::{Tensor, Result};

fn main() -> Result<()> {
    let a = Tensor::ones(vec![2, 1])?;  // Shape: [2, 1]
    let b = Tensor::ones(vec![1, 3])?;  // Shape: [1, 3]
    
    // Broadcasting: [2, 1] + [1, 3] -> [2, 3]
    let c = (a + b)?;
    println!("Result shape: {:?}", c.shape().dims());
    
    Ok(())
}

Tensor Manipulation

use tensor_frame::{Tensor, Result, TensorOps};

fn main() -> Result<()> {
    let tensor = Tensor::from_vec(
        vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0],
        vec![2, 3]
    )?;
    
    // Reshape
    let reshaped = tensor.reshape(vec![3, 2])?;
    
    // Transpose (2D only for now)
    let transposed = reshaped.transpose()?;
    
    // Squeeze and unsqueeze
    let squeezed = tensor.squeeze(None)?;
    let unsqueezed = squeezed.unsqueeze(0)?;
    
    Ok(())
}