uiua-math

uiua-math

FFTConvolve

FFTConvolve module

Rank-polymorphic convolution using fast fourier transform


FFTConvolve~Full function

|2

Full convolution wherever any overlap between the inputs exists

Source code
FullR=0type(×/×fft×0-1+)

FFTConvolve~Valid function

|2

Convolution of only instances of complete overlap between inputs

Source code
ValidR=0type(-+1(×/×fft×0)-)

FFTConvolve~Same function

|2

Convolution that maintains the largest of the input dimensions

Source code
Same(÷-)Full

Monadic functions

Mean function

|1

Arithmetic mean

Source code
Mean÷/+

GMean function

|1

Geometric mean

Source code
GMean˜÷1/×

HMean function

|1

Harmonic mean

Source code
HMean÷/+˜÷1

QMean function

|1

Quadratic mean

Source code
QMean÷/+°

Median function

|1

Median TODO: O(n) median algorithm?

Source code
Median÷2/+÷2-1

Var function

|1

Variance

Source code
Var-°÷/+°

Stdev function

|1

Standard deviation

Source code
StdevVar

MDet function

|1

Matrix Determinant

Source code
MDetGaussEliminate‼(¯𝄐𝄐/)𝄐𝄐× 01

Mgje function

|1

Perform Gauss-Jordan elimination

Source code
MgjeGaussEliminate‼(|)("Elimination cannot be completed"0)

MInv function

|1

Matrix Inverse

Source code
MInv|1 ((÷2) Mgje("Matrix has no inverse"0) ˜˙=°|MInv)

MCof function

|1

Matrix Cofactors

Source code
MCof¯.2°MSquarify(MDet MSquarify¤¬°)¤0°=.

Fact function

|1

Pervasive factorial

Source code
Fact/×°+10

Gamma function

|1

Gamma function Γ(z)

Source code
Gamma(
-1/2 (
-1
# From https://en.wikipedia.org/wiki/Lanczos_approximation
°[
0.9999999999999999
1975.3739023578853
¯4397.382392792243
3462.6328459862716
¯1156.9851431631168
154.53815050252774
¯6.253671612368916
0.034642762454736804
¯7.477617197444297e-7
6.304125382185226e-8
¯2.7405717035683877e-8
4.048694881756761e-9
]
/+÷1+¤:
)
××× τ ¯e + 8 # g
)

Divisors function

|1?N

Divisors of N (including 1 and N) The values are in increasing order and distinct.

Source code
Divisors°÷ =0÷ +1

Erf function

|1

Error function

Source code
Erf(
˜÷1+1×0.3275911 (˜e¯×.) ±
:[1.061405429 ¯1.453152027 1.421413741
¯0.284496736 0.254829592
]:0
׬×(×+)¤
)

PSet function

|1

Powerset of a list

Source code
PSet˜2¤

RPFFT function

|1

Rank-polymorphic fast fourier transform

Source code
RPFFT((fft).|°(fft).)

Dyadic functions

Dot function

|2

Dot product

Source code
Dot/+×

Cross function

|2

Cross product

Source code
Cross2-(×2):

Mmp function

|2?AB

Matrix product

Computes AB

Source code
Mmp|2 (˜Dot|Mmp MInv)

Mvp function

|2?MV

Matrix-vector product

Computes MV where V is represented as a 1D list of numbers

Source code
Mvp|2 (Dot|Mvp MInv)

Mpow function

|2?PM

Matrix power

Source code
MpowMmp(:˙=°)

Qqp function

|2?PQ

Quaternion product

Computes PQ for quaternion arrays P and Q.

Semi-pervasive; the last axis of the inputs must be of length 4, and will be interpreted as the input quaternions' real, i, j, and k.

# Computes (1+2i+3j+4k)(1+3i+5j+7k) and (2+4i+6j+8k)(5+6i+7j+8k)
Qqp [1_2_3_4 2_4_6_8] [1_3_5_7 5_6_7_8]
## ╭─
## ╷  ¯48  6  6 12
##   ¯120 24 60 48
##                 ╯
Source code
Qqp/+-1×±QqpMask×°

RQuat function

|2?θU

Create 3D rotation quaternions.

Expects an angle array θ and a unit vector axis array U.

Semi-pervasive; the unit vector array must have one extra trailing axis compared to the angle array, and that axis must be length 3.

For each angle-vector pair, computes cos(θ/2) + Usin(θ/2).

# Creates two rotation quaternions:
# - η radians about 0_0_1
# - π radians about 3/5_4/5_0
RQuat η_π [0_0_1 3/5_4/5_0]

To use rotation quaternions created by RQuat to rotate 3D vectors, see QRot.

Source code
RQuat°𝄐×°÷2

QRot function

|2?QV

Rotate a 3D vector array using a quaternion array.

To create rotation quaternions to use with QRot, see RQuat.

Expects a quaternion array Q and a 3D vector array V.

Semi-pervasive; the input arrays should have matching shapes aside from the final axis, which should be of lengths 4 and 3 respectively.

For each quaternion-vector pair, computes Q * V * Q'.

RQuat η 0_0_1        # Create a rotation by η radians about 0_0_1
QRot ¤:[3_2_0 1_3_2] # Use the quaternion to rotate 3_2_0 and 1_3_2

QRot can be used with ⍜ to undo the rotations afterward.

Source code
QRot(QRotImpl|QRotImpl(1°)¯)

GCD function

|2

Greatest common divisor

Ignores sign

Source code
GCD±

LCM function

|2

Least common multiple

Ignores sign

Source code
LCM÷GCD×

Base function

|2

Encode an array of numbers into digits of a given base

Analogous to for base 2; the least significant digit is first.

Base allows multiple bases as input.

# Encodes 6 in base 2, 7 in base 3, 8 in base 4, and 9 in base 5.
Base [2_3 4_5] [6_7 8_9]
## ╭─
## ╷ 0 1 1
## ╷ 1 2 0
##
##   0 2 0
##   4 1 0
##         ╯

You can use ⌝Base to decode from a base/bases.

# Decodes 6 in base 2, 7 in base 3, 8 in base 4, and 9 in base 5.
⌝Base [2_3 4_5] [[0_1_1 1_2_0] [0_2_0 4_1_0]]
## ╭─
## ╷ 6 7
##   8 9
##       ╯
Source code
Base(
(¤÷)¤/+1[]
| /+פ°)

ModInv function

|2?NM

Inverse of N modulo M (M if nonexistent)

Source code
ModInv1˜×

ModOrd function

|2?NM

Multiplicative order of N modulo M

Source code
ModOrd1=1˜

Binom function

|2?KN

Binomial coefficient aka N choose K

Source code
Binom/×÷+1-

CFrac function

|2?NX

Convert a number X to a continued fraction to N terms.

Use °CFrac to convert to a number from a continued fraction.

Source code
CFrac((÷1)|/(+˜÷1))

BoxMuller function

|2.2

Box-Muller transform

Converts uniformly distributed pairs of input values to standard normally distributed pairs of output values

Source code
BoxMuller×°×τ:ׯ2e¬

Gaussian function

|2?SizeStandardDeviation

Generate a 2 dimensional square Gaussian kernel

Source code
Gaussian÷/+˜e¯÷2°˜÷.-÷2-1

GeomPmf function

|2?pX

Geometric distribution

Probability of X failures before the first success of repeated trials with success probability p

Source code
GeomPmfט¬:

GeomCmf function

|2?pX

Cumulative geometric distribution

Probability of X or fewer failures before the first success of repeated trials with success probability p

Source code
GeomCmf¬˜(+1)

PoissonPmf function

|2?λX

Poisson distribution

Probability of X occurrences of an unlikely event over many trials with expected value λ

Source code
PoissonPmf÷×(Fact|˜|e¯)

PoissonCmf function

|2?λX

Cumulative Poisson distribution

Probability of X or fewer occurrences of an unlikely event over many trials with expected value λ

Source code
PoissonCmf/+PoissonPmf¤(+1)

Triadic functions

DistRand function

|3Indices?DistributionShapeSeed

Seeded random indices from a distribution array

Given a seed, a shape, and a probability distribution array of any rank containing positive numbers, DistRand normalizes the distribution if necessary so it sums to 1, then returns an array of deep indices into the distribution arrays, chosen randomly weighted by the distribution. The generated random indices will fill the shape given to the function. If the distribution array is rank 1, the output will have the shape given. If the distribution array is rank >1, the output will have a shape equal to the shape given suffixed with the rank of the distribution array.

# Generate random indices in the shape 2_3 with a seed of 8
DistRand [0.1 0.4 0.3 0.2] 2_3 8
## ╭─
## ╷ 1 2 3
##   2 1 2
##         ╯
Source code
DistRand˜(>)¤gen\+÷/+

BinomPmf function

|3?pnX

Binomial distribution

Probability that n Bernoulli trials each with success probability p will amount to X successes

Source code
BinomPmf××(>|𝄐|-¬) :

BinomCmf function

|3?pnX

Cumulative binomial distribution

Probability that n Bernoulli trials each with success probability p will amount to X or fewer successes

NOTE: This function only accepts scalars for X. Use each or rows if multiple X values are desired

Source code
BinomCmf/+BinomPmf¤(+1)

NormalPdf function

|3?σμX

Normal distribution

Probability density of a gaussian/bell curve with mean μ and standard deviation σ

Source code
NormalPdf÷(×τ|e÷2¯°÷-)

NormalCdf function

|3?σμX

Cumulative normal distribution

Probability that a normally distributed random variable with mean μ and standard deviation σ is less than X

Source code
NormalCdf÷2+1Erf÷×2-

Quad function

|3?ABC

Po-Shen quadratic solver

Returns roots as a list

Outputs complex-typed numbers only if the roots are complex

Source code
QuadR:-+:±˜-°:¯÷÷