Skip to content

Array Operations

Arithmetic Operations

All standard arithmetic operations preserve dimensional correctness:

from dimtensor import DimArray, units

a = DimArray([1, 2, 3], units.m)
b = DimArray([4, 5, 6], units.m)

# Addition/subtraction (requires same dimension)
a + b  # [5 7 9] m
a - b  # [-3 -3 -3] m

# Multiplication (dimensions combine)
c = DimArray([2], units.s)
a * c  # [2 4 6] m*s

# Division (dimensions divide)
a / c  # [0.5 1.0 1.5] m/s

# Power (dimension exponentiated)
a ** 2  # [1 4 9] m^2

Reduction Operations

Reduce arrays while preserving units:

arr = DimArray([[1, 2, 3], [4, 5, 6]], units.m)

# Sum
arr.sum()           # [21] m
arr.sum(axis=0)     # [5 7 9] m
arr.sum(axis=1)     # [6 15] m

# Mean
arr.mean()          # [3.5] m

# Min/Max
arr.min()           # [1] m
arr.max()           # [6] m

# Standard deviation (preserves unit)
arr.std()           # [...] m

# Variance (squares the unit)
arr.var()           # [...] m^2

Searching

Find indices of minimum/maximum values:

arr = DimArray([3, 1, 4, 1, 5], units.m)

# Returns plain numpy integers/arrays (not DimArray)
arr.argmin()        # 1
arr.argmax()        # 4

# With axis
arr2d = DimArray([[3, 1], [2, 4]], units.m)
arr2d.argmin(axis=0)  # [1, 0]
arr2d.argmax(axis=1)  # [0, 1]

Reshaping

Reshape operations preserve units:

arr = DimArray([1, 2, 3, 4, 5, 6], units.m)

# Reshape
arr.reshape((2, 3))      # [[1 2 3] [4 5 6]] m
arr.reshape((3, -1))     # [[1 2] [3 4] [5 6]] m

# Transpose
arr2d = DimArray([[1, 2, 3], [4, 5, 6]], units.m)
arr2d.transpose()        # [[1 4] [2 5] [3 6]] m

# Flatten
arr2d.flatten()          # [1 2 3 4 5 6] m

Array Functions

Module-level functions for combining arrays:

from dimtensor import DimArray, units, concatenate, stack, split

a = DimArray([1, 2], units.m)
b = DimArray([3, 4], units.m)

# Concatenate (requires same dimension)
concatenate([a, b])      # [1 2 3 4] m

# Stack (creates new axis)
stack([a, b])            # [[1 2] [3 4]] m
stack([a, b], axis=1)    # [[1 3] [2 4]] m

# Split
arr = DimArray([1, 2, 3, 4], units.m)
split(arr, 2)            # [[1 2] m, [3 4] m]

Linear Algebra

Linear algebra functions with proper dimension handling:

from dimtensor import DimArray, units, dot, matmul, norm

# Dot product (dimensions multiply)
length = DimArray([1, 2, 3], units.m)
force = DimArray([4, 5, 6], units.N)
work = dot(length, force)  # [32] J (m * N = J)

# Matrix multiplication
A = DimArray([[1, 2], [3, 4]], units.m)
B = DimArray([[5, 6], [7, 8]], units.s)
matmul(A, B)  # Result has dimension m*s

# Norm (preserves unit)
velocity = DimArray([3, 4], units.m / units.s)
speed = norm(velocity)  # [5] m/s

NumPy ufunc Integration

Use NumPy functions directly:

import numpy as np
from dimtensor import DimArray, units

# Trigonometric functions (require dimensionless)
angle = DimArray([0, 3.14159/2], units.rad)
np.sin(angle)  # [0, 1]
np.cos(angle)  # [1, 0]

# Exponential/log (require dimensionless)
x = DimArray([0, 1, 2], units.rad)  # dimensionless
np.exp(x)
np.log(x + 1)

# sqrt (halves dimension exponents)
area = DimArray([4, 9, 16], units.m**2)
np.sqrt(area)  # [2 3 4] m

# abs (preserves unit)
velocity = DimArray([-1, 2, -3], units.m / units.s)
np.abs(velocity)  # [1 2 3] m/s

Dimensional Requirements

Functions like sin, cos, exp, log require dimensionless input. Attempting to use them with dimensional quantities raises DimensionError.