Getting Started
Installation
Add Tensor Frame to your Cargo.toml
:
[dependencies]
tensor_frame = "0.0.3-alpha"
Feature Flags
Tensor Frame supports optional backends via feature flags:
[dependencies]
# CPU only (default)
tensor_frame = "0.0.3-alpha"
# With WGPU support
tensor_frame = { version = "0.0.3-alpha", features = ["wgpu"] }
# With CUDA support
tensor_frame = { version = "0.0.3-alpha", features = ["cuda"] }
# All backends
tensor_frame = { version = "0.0.3-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(())
}