NumPy 的 Moonbit 移植 —— 多维数组、线性代数、FFT、随机数
Dependencies
Multi-dimensional arrays, linear algebra, FFT, random numbers, polynomials, masked arrays, datetime — a complete reimplementation of NumPy 2.x public API surface in Moonbit.
{
"import": {
"amor2025/moonNum": {
"path": "moonNum",
"rev": "..."
}
}
}moon add amor2025/moonNumimport @amor2025/moonNum/src/core
import @amor2025/moonNum/src/dtypes
// From a list
let a = @core.array(
[Scalar::Int(1L), Scalar::Int(2L), Scalar::Int(3L)],
[3],
)
// Zeros / identity
let z = @core.zeros([2, 3], dtype=@dtypes.float64)
let e = @core.eye(3, dtype=@dtypes.float64)
// Range sequences
let r = @core.arange_double(start=0.0, stop=1.0, step=0.25) // [0.0, 0.25, 0.5, 0.75]
let l = @core.linspace(0.0, 1.0, num=5) // [0.0, 0.25, 0.5, 0.75, 1.0]let a = @core.array([Scalar::Float(1.0), Scalar::Float(2.0), Scalar::Float(3.0)], [3])
let b = @core.array([Scalar::Float(10.0), Scalar::Float(20.0), Scalar::Float(30.0)], [3])
let c = @core.add(a, b) // [11.0, 22.0, 33.0]
let d = @core.multiply(a, b) // [10.0, 40.0, 90.0]
// Broadcasting: scalar + array
let e = @core.add(a, @core.array([Scalar::Float(100.0)], [1])) // [101.0, 102.0, 103.0]import @amor2025/moonNum/src/linalg
let m = @core.array(
[Scalar::Float(1.0), Scalar::Float(2.0),
Scalar::Float(3.0), Scalar::Float(4.0)],
[2, 2],
)
let inv_m = @linalg.inv(m) // matrix inverse
let det_m = @linalg.det(m) // determinant
let matmul_m = @linalg.matmul(m, m) // matrix multiplicationimport @amor2025/moonNum/src/fft
let signal = @core.array(
[Scalar::Float(1.0), Scalar::Float(0.0), Scalar::Float(0.0), Scalar::Float(0.0)],
[4],
)
let spectrum = @fft.fft(signal) // forward transform
let recovered = @fft.ifft(spectrum) // inverse transformimport @amor2025/moonNum/src/random
let rng = @random.default_rng() // MT19937 generator
let uniform_samples = rng.uniform(0.0, 1.0, size=[5]) // 5 uniform [0,1) samples
let normal_samples = rng.normal(0.0, 1.0, size=[5]) // 5 standard normal samplesimport @amor2025/moonNum/src/polynomial
// Fit with Chebyshev polynomials
let x = @core.array([Scalar::Float(0.0), Scalar::Float(1.0), Scalar::Float(2.0)], [3])
let y = @core.array([Scalar::Float(1.0), Scalar::Float(3.0), Scalar::Float(7.0)], [3])
let p = @polynomial.Chebyshev::fit(x, y, 2) // degree-2 Chebyshev fit
// Evaluate: call takes an NdArray
let eval_point = @core.array([Scalar::Float(0.5)], [1])
let val = p.call(eval_point)import @amor2025/moonNum/src/ma
let data = @core.array([Scalar::Float(1.0), Scalar::Float(2.0), Scalar::Float(3.0)], [3])
let mask = @core.array(
[Scalar::Bool(false), Scalar::Bool(true), Scalar::Bool(false)], [3],
)
let masked = @ma.masked_array(data, mask=mask)
let total = @ma.sum(masked) // 1.0 + 3.0 = 4.0 (skips masked elements)| Package | Import path | Description | NumPy equivalent |
|---|---|---|---|
| core | src/core | NdArray core, array creation, ufuncs, broadcasting, indexing, reductions, sorting, set ops | numpy.core, numpy |
| dtypes | src/dtypes | Dtype enum, scalar type constants (int8/float64/...), Scalar type | numpy.dtype |
| constants | src/constants | Math & physics constants (e / pi / golden / Avogadro / Boltzmann …) | numpy.constants |
| exceptions | src/exceptions | Exception types (AxisError / ComplexWarning / RankWarning / TooHardError …) | numpy.exceptions |
| linalg | src/linalg | Linear algebra (matmul / inv / solve / det / svd / qr / cholesky / eig / lstsq) | numpy.linalg |
| fft | src/fft | Fast Fourier Transform (fft / ifft / rfft / irfft / fft2 / ifft2 / fftn / hfft …) | numpy.fft |
| random | src/random | Random generation (MT19937 + 30+ distributions) | numpy.random |
| polynomial | src/polynomial | Polynomials (Polynomial / Chebyshev / Legendre / Hermite / HermiteE / Laguerre) | numpy.polynomial |
| ma | src/ma | Masked arrays (MaskedArray + full utility suite + extras) | numpy.ma |
| char | src/char | String array ops (compare / concat / case / split / replace …) | numpy.char |
| io | src/io | File IO (.npy / .npz read-write, savez / loadz) | numpy.io |
| datetime | src/datetime | Date & time (datetime64 / timedelta64 / business-day utils) | numpy.datetime64 |
| typing | src/typing | Type aliases (ArrayLike / DTypeLike / NDArray / NBitBase) | numpy.typing |
| matrixlib | src/matrixlib | Matrix class (Matrix / asmatrix / bmat) | numpy.matrixlib |
| lib | src/lib | Numeric utilities (i0 / interp / window functions / NaN-safe reductions / diff / gradient …) | numpy.lib |
dtypes (no deps) constants (no deps)
│ │
├── core ───────────────────┤
│ │ │
│ ├── linalg ───────────┤
│ │ │ │
│ │ ├── polynomial
│ │ ├── ma
│ │ └── matrixlib
│ │ │
│ ├── fft │
│ ├── random │
│ ├── char │
│ ├── io │
│ ├── datetime │
│ ├── typing │
│ └── lib │
│ │
└── exceptions ─────────────┘| NumPy | moonNum | Reason |
|---|---|---|
| np.var | variance | var is a Moonbit reserved keyword |
| np.prod | product | prod conflicts with built-in in some contexts |
| np.matrix.I | matrix.i | Moonbit uses lowercase method naming convention |
| np.matrix.T | matrix.t | Same as above |
| np.matrix.A1 | matrix.a1 | Same as above |
| np.ndarray.dtype (attribute) | ndarray.dtype() (method) | Moonbit has no Python-style property access |
# Run all tests
moon test
# Generate coverage report
moon test --enable-coverage
moon coverage report -f summarymoon doc --target-dir docs# Type check
moon check
# Build
moon build
# Run tests
moon testInstall
Download zipNumPy 的 Moonbit 移植 —— 多维数组、线性代数、FFT、随机数
Dependencies