einops style multi dimensional meshgrids
Project description
einmesh
einops-style multi dimensional meshgrids
Installation
Simple installation from pip:
pip install einmesh
or uv
uv add einmesh
Features
- einops-style Meshgrid Generation: The core function
einmeshallows creating multi-dimensional meshgrids (liketorch.meshgrid) using a concise string pattern similar toeinops. - Flexible Space Definitions: Users define the dimensions using various "space" objects:
LinSpace: Linearly spaced points.LogSpace: Logarithmically spaced points.UniformDistribution: Points sampled from a uniform distribution.NormalDistribution: Points sampled from a normal distribution.
- Pattern Features:
- Named Dimensions: Pattern elements correspond to keyword arguments (e.g.,
einmesh("x y", x=LinSpace(...), y=LogSpace(...))). - Dimension Ordering: The order in the pattern determines the order/shape of the output tensors (using
ijindexing convention, like NumPy). - Stacking (
*): A*in the pattern stacks the individual coordinate tensors along a new dimension, returning a single tensor. - Grouping (
()): Parentheses group axes for rearrangement usingeinops.rearrange. - Duplicate Names: Handles patterns like
"x x y", which repeats an axis and re-samples it.
- Named Dimensions: Pattern elements correspond to keyword arguments (e.g.,
- Output:
- Returns a tuple of coordinate tensors if no
*is present. - Returns a single stacked tensor if
*is present.
- Returns a tuple of coordinate tensors if no
- Backend: Uses
torchtensors andtorch.meshgridinternally.
Examples
Here are a few examples demonstrating how to use einmesh:
1. Basic 2D Linear Grid
Create a simple 2D grid with linearly spaced points along x and y.
import torch
from einmesh import einmesh, LinSpace
# Define the spaces
x_space = LinSpace(0, 1, 10) # 10 points from 0 to 1
y_space = LinSpace(-1, 1, 20) # 20 points from -1 to 1
# Create the meshgrid
# Output: tuple of two tensors, each with shape (10, 20) following 'ij' indexing
x_coords, y_coords = einmesh("x y", x=x_space, y=y_space)
print(x_coords.shape, y_coords.shape)
# Output: torch.Size([10, 20]) torch.Size([10, 20])
2. Stacked Coordinates
Create a 3D grid and stack the coordinate tensors into a single tensor.
import torch
from einmesh import einmesh, LinSpace, LogSpace
x_space = LinSpace(0, 1, 5)
y_space = LinSpace(0, 1, 6)
z_space = LogSpace(1, 100, 7) # 7 log-spaced points from 1 to 100
# Use '*' to stack the coordinates along the last dimension
# Output: single tensor with shape (5, 6, 7, 3)
coords = einmesh("x y z *", x=x_space, y=y_space, z=z_space)
print(coords.shape)
# Output: torch.Size([5, 6, 7, 3])
# coords[..., 0] contains x coordinates
# coords[..., 1] contains y coordinates
# coords[..., 2] contains z coordinates
3. Using Distributions
Generate grid points by sampling from distributions.
import torch
from einmesh import einmesh, UniformDistribution, NormalDistribution
# Sample 10 points uniformly between -5 and 5 for x
x_dist = UniformDistribution(-5, 5, 10)
# Sample 15 points from a normal distribution (mean=0, std=1) for y
y_dist = NormalDistribution(0, 1, 15)
# Create the meshgrid
# Output: tuple of two tensors, each with shape (10, 15)
x_samples, y_samples = einmesh("x y", x=x_dist, y=y_dist)
print(x_samples.shape, y_samples.shape)
# Output: torch.Size([10, 15]) torch.Size([10, 15])
# Note: The points along each axis will not be sorted.
4. Duplicate Dimension Names
Use the same space definition for multiple axes.
import torch
from einmesh import einmesh, LinSpace
space = LinSpace(0, 1, 5)
# 'x' space is used for both the first and second dimensions.
# Output shapes: (5, 5, 10) for each tensor
x0_coords, x1_coords, y_coords = einmesh("x x y", x=space, y=LinSpace(-1, 1, 10))
print(x0_coords.shape, x1_coords.shape, y_coords.shape)
# Output: torch.Size([5, 5, 10]) torch.Size([5, 5, 10]) torch.Size([5, 5, 10])
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file einmesh-0.1.0.tar.gz.
File metadata
- Download URL: einmesh-0.1.0.tar.gz
- Upload date:
- Size: 138.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dca392191e27e4a4323d5ebdd1bb7ce6ed8d7cf26d076a0adc6d46d727fc7cc5
|
|
| MD5 |
40413815a2009407e6ae21082fa6472e
|
|
| BLAKE2b-256 |
cdc618414d944952f932db2e518b2f4098424bee07752570c4cbd9217da489f3
|
File details
Details for the file einmesh-0.1.0-py3-none-any.whl.
File metadata
- Download URL: einmesh-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
05a8ea3fd51e4084be954e251d42b6a1e656a9003b8ee520fd7eef2521d9f36d
|
|
| MD5 |
c82462506175adb3d7848ea1003318ea
|
|
| BLAKE2b-256 |
089e5c84052e2851e449e5a0cbd007af6a09679336f343b531ff1ff9656fb7e3
|