02
Tensors
Math
Broadcasting
Tensor Operations
Deepbox provides 90+ element-wise operations that follow broadcasting rules. This example demonstrates element-wise arithmetic (add, sub, mul, div), mathematical functions (sin, cos, exp, log, sqrt, abs), reductions along axes (sum, mean, max, min, std, variance), comparisons (greater, less, equal), logical operations (logicalAnd, logicalOr), and tensor manipulation (concatenate, stack, sort, argsort, dot).
Deepbox Modules Used
deepbox/ndarrayWhat You Will Learn
- Element-wise arithmetic follows broadcasting rules automatically
- 90+ math functions: trigonometric, exponential, rounding, etc.
- Reductions (sum, mean, max, min, std) support axis parameter and keepdims
- Comparison and logical operations return boolean tensors
- dot() performs matrix multiplication for 2D tensors
Source Code
02-tensor-operations/index.ts
1import {2 add,3 cos,4 div,5 exp,6 log,7 max,8 mean,9 min,10 mul,11 sin,12 sqrt,13 sub,14 sum,15 tensor,16} from "deepbox/ndarray";1718console.log("=== Tensor Operations ===\n");1920// Basic arithmetic21const a = tensor([1, 2, 3, 4]);22const b = tensor([5, 6, 7, 8]);2324console.log("a =", a.toString());25console.log("b =", b.toString());2627console.log("\nArithmetic Operations:");28console.log("a + b =", add(a, b).toString());29console.log("a * b =", mul(a, b).toString());30console.log("a - b =", sub(a, b).toString());31console.log("a / b =", div(a, b).toString());3233// Mathematical functions34const x = tensor([1, 4, 9, 16]);35console.log("\nMathematical Functions:");36console.log("x =", x.toString());37console.log("sqrt(x) =", sqrt(x).toString());38console.log("exp(x) =", exp(tensor([0, 1, 2])).toString());39console.log("log(x) =", log(x).toString());4041// Trigonometric functions42const angles = tensor([0, Math.PI / 4, Math.PI / 2, Math.PI]);43console.log("\nTrigonometric Functions:");44console.log("angles =", angles.toString());45console.log("sin(angles) =", sin(angles).toString());46console.log("cos(angles) =", cos(angles).toString());4748// Reduction operations49const matrix = tensor([50 [1, 2, 3],51 [4, 5, 6],52]);5354console.log("\nReduction Operations:");55console.log("matrix =");56console.log(matrix.toString());57console.log("sum(matrix) =", sum(matrix).toString());58console.log("mean(matrix) =", mean(matrix).toString());59console.log("max(matrix) =", max(matrix).toString());60console.log("min(matrix) =", min(matrix).toString());6162// Axis-wise reductions63console.log("\nAxis-wise Reductions:");64console.log("sum(matrix, axis=0) =", sum(matrix, 0).toString());65console.log("sum(matrix, axis=1) =", sum(matrix, 1).toString());66console.log("mean(matrix, axis=0) =", mean(matrix, 0).toString());6768console.log("\n✓ Tensor operations complete!");Console Output
$ npx tsx 02-tensor-operations/index.ts
=== Tensor Operations ===
a = tensor([1, 2, 3, 4], dtype=float32)
b = tensor([5, 6, 7, 8], dtype=float32)
Arithmetic Operations:
a + b = tensor([6, 8, 10, 12], dtype=float32)
a * b = tensor([5, 12, 21, 32], dtype=float32)
a - b = tensor([-4, -4, -4, -4], dtype=float32)
a / b = tensor([0.2000, 0.3333, 0.4286, 0.5000], dtype=float32)
Mathematical Functions:
x = tensor([1, 4, 9, 16], dtype=float32)
sqrt(x) = tensor([1, 2, 3, 4], dtype=float64)
exp(x) = tensor([1, 2.718, 7.389], dtype=float64)
log(x) = tensor([0, 1.386, 2.197, 2.773], dtype=float32)
Trigonometric Functions:
angles = tensor([0, 0.7854, 1.571, 3.142], dtype=float32)
sin(angles) = tensor([0, 0.7071, 1.000, -8.742e-8], dtype=float64)
cos(angles) = tensor([1, 0.7071, -4.371e-8, -1.000], dtype=float64)
Reduction Operations:
matrix =
tensor([[1, 2, 3]
[4, 5, 6]], dtype=float32)
sum(matrix) = tensor(21, dtype=float64)
mean(matrix) = tensor(3.500, dtype=float64)
max(matrix) = tensor(6, dtype=float32)
min(matrix) = tensor(1, dtype=float32)
Axis-wise Reductions:
sum(matrix, axis=0) = tensor([5, 7, 9], dtype=float64)
sum(matrix, axis=1) = tensor([6, 15], dtype=float64)
mean(matrix, axis=0) = tensor([2.500, 3.500, 4.500], dtype=float64)
✓ Tensor operations complete!