dimtensor vs Astropy Units¶
Astropy provides a comprehensive units package designed for astronomy. This page compares it with dimtensor.
TL;DR¶
| Feature | dimtensor | Astropy |
|---|---|---|
| Focus | General physics + ML | Astronomy |
| PyTorch support | Native | None |
| JAX support | Native | None |
| Astronomy units | Domain module | Comprehensive |
| Equivalencies | Basic | Advanced (spectral, etc.) |
| FITS I/O | No | Native |
| Uncertainty | Built-in | Separate NDData |
When to Choose dimtensor¶
Choose dimtensor if you need:
- Machine learning with units (PyTorch, JAX)
- GPU acceleration
- Built-in uncertainty propagation
- Multi-framework support (NumPy + PyTorch + JAX)
- General physics beyond astronomy
# dimtensor: ML with astronomy units
from dimtensor.torch import DimTensor
from dimtensor.domains.astronomy import solar_mass, parsec
import torch
mass = DimTensor(torch.tensor([1.0], requires_grad=True), solar_mass)
# Use in neural network training...
When to Choose Astropy¶
Choose Astropy if you need:
- Comprehensive astronomy unit system
- Spectral equivalencies (wavelength/frequency/energy)
- FITS file I/O with units
- Coordinate transformations
- Integration with other Astropy tools
# Astropy: Spectral equivalencies
from astropy import units as u
wavelength = 500 * u.nm
frequency = wavelength.to(u.Hz, equivalencies=u.spectral())
energy = wavelength.to(u.eV, equivalencies=u.spectral())
Feature Comparison¶
Unit Systems¶
Equivalencies¶
Astropy excels at equivalencies (conversions between physically related but dimensionally different quantities):
from astropy import units as u
# Automatic equivalencies
wavelength = 500 * u.nm
# Convert between wavelength, frequency, and energy
freq = wavelength.to(u.Hz, equivalencies=u.spectral())
energy = wavelength.to(u.eV, equivalencies=u.spectral())
# Temperature equivalencies
temp = 5000 * u.K
wavelength_peak = temp.to(u.um, equivalencies=u.temperature_energy())
Machine Learning¶
I/O Support¶
| Format | dimtensor | Astropy |
|---|---|---|
| JSON | Yes | No |
| HDF5 | Yes | Via Astropy Table |
| Parquet | Yes | No |
| NetCDF | Yes | No |
| FITS | No | Native |
| VOTable | No | Native |
Uncertainty Handling¶
Migration from Astropy¶
If you're adding ML to astronomy code:
# Astropy code
from astropy import units as u
from astropy import constants as const
mass = 1.0 * u.solMass
velocity = 200 * u.km / u.s
kinetic_energy = 0.5 * mass * velocity**2
# dimtensor equivalent (for ML compatibility)
from dimtensor import DimArray
from dimtensor.domains.astronomy import solar_mass
from dimtensor import units
mass = DimArray([1.0], solar_mass)
velocity = DimArray([200], units.km / units.s)
kinetic_energy = 0.5 * mass * velocity**2
# Now can use with PyTorch/JAX
Using Both Together¶
For astronomy projects needing ML, consider using both:
from astropy import units as u
from dimtensor import DimArray, units as dt_units
from dimtensor.torch import DimTensor
import torch
# Load data with Astropy (FITS, coordinates, etc.)
from astropy.io import fits
data = fits.getdata('observations.fits')
astropy_flux = data * u.Jy
# Convert to dimtensor for ML
flux_values = astropy_flux.to(u.W / u.m**2 / u.Hz).value
flux = DimTensor(torch.tensor(flux_values), dt_units.W / dt_units.m**2 / dt_units.Hz)
# Train your model with units preserved...
Conclusion¶
- Use dimtensor for ML workflows, GPU computing, or general physics
- Use Astropy for astronomy-specific workflows, FITS files, or coordinate transformations
- Use both when you need Astropy's astronomy features plus ML capabilities