Documentation ¶
Overview ¶
Package utl implements functions for simplifying calculations and allocation of structures such as slices and slices of slices. It also contains functions for sorting quantities.
Index ¶
- Constants
- func AllFalse(values []bool) bool
- func AllTrue(values []bool) bool
- func Alloc(m, n int) (mat [][]float64)
- func ArgMinMax(v []float64) (imin, imax int)
- func ArrayToMat(v []float64, m, n int) (a [][]float64)
- func BestSquare(size int) (nrow, ncol int)
- func Clone(a [][]float64) (b [][]float64)
- func Cross3d(w, u, v []float64)
- func CumSum(cs, p []float64)
- func Deep2checkSize(n1, n2 int, a [][]float64) bool
- func Deep2transpose(a [][]float64) (aT [][]float64)
- func Deep3Deserialize(I, P []int, S []float64, debug bool) (A [][][]float64)
- func Deep3GetInfo(I, P []int, S []float64, verbose bool) (nitems, nrows, ncolsTot int, ncols []int)
- func Deep3Serialize(A [][][]float64) (I, P []int, S []float64)
- func Deep3alloc(n1, n2, n3 int) (a [][][]float64)
- func Deep3checkSize(n1, n2, n3 int, a [][][]float64) bool
- func Deep3set(a [][][]float64, v float64)
- func Deep4alloc(n1, n2, n3, n4 int) (a [][][][]float64)
- func Deep4set(a [][][][]float64, v float64)
- func Digits(maxint int) (ndigits int, format string)
- func Dot3d(u, v []float64) (s float64)
- func DurSum(v []time.Duration) (seconds float64)
- func Expon(val float64) (ndigits int)
- func Fill(s []float64, val float64)
- func FlipCoin(p float64) bool
- func FromString(s string) (r []float64)
- func FromStrings(s []string) (v []float64)
- func GetColumn(j int, v [][]float64) (x []float64)
- func GetCopy(in []float64) (out []float64)
- func GetITout(allOutputTimes, timeStationsOut []float64, tol float64) (I []int, T []float64)
- func GetMapped(X []float64, filter func(x float64) float64) (Y []float64)
- func GetMapped2(X [][]float64, filter func(x float64) float64) (Y [][]float64)
- func GetReversed(in []float64) (out []float64)
- func GetSorted(A []float64) (sortedA []float64)
- func GetStrides(nTotal, nReq int) (I []int)
- func GtPenalty(x, b, penaltyM float64) float64
- func GtePenalty(x, b, penaltyM float64) float64
- func Iabs(a int) int
- func Imax(a, b int) int
- func Imin(a, b int) int
- func IntAddScalar(a []int, s int) (res []int)
- func IntAlloc(m, n int) (mat [][]int)
- func IntBoolMapSort(m map[int]bool) (sortedKeys []int)
- func IntClone(a [][]int) (b [][]int)
- func IntCopy(in []int) (out []int)
- func IntFill(s []int, val int)
- func IntFilter(a []int, out func(idx int) bool) (res []int)
- func IntGetSorted(A []int) (sortedA []int)
- func IntIndexSmall(a []int, val int) int
- func IntIntsMapAppend(m map[int][]int, key int, item int)
- func IntMinMax(v []int) (mi, ma int)
- func IntNegOut(a []int) (res []int)
- func IntPy(a []int) (res string)
- func IntRange(n int) (res []int)
- func IntRange2(start, stop int) []int
- func IntRange3(start, stop, step int) (res []int)
- func IntSort3(a, b, c *int)
- func IntSort4(a, b, c, d *int)
- func IntUnique(slices ...[]int) (res []int)
- func IntVals(n int, val int) (s []int)
- func IsPowerOfTwo(n int) bool
- func L2norm(p, q []float64) (dist float64)
- func LinSpace(start, stop float64, num int) (res []float64)
- func LinSpaceOpen(start, stop float64, num int) (res []float64)
- func MatToArray(a [][]float64) (v []float64)
- func Max(a, b float64) float64
- func MeshGrid2d(xmin, xmax, ymin, ymax float64, nx, ny int) (X, Y [][]float64)
- func MeshGrid2dF(xmin, xmax, ymin, ymax float64, nx, ny int, f func(x, y float64) float64) (X, Y, Z [][]float64)
- func MeshGrid2dFG(xmin, xmax, ymin, ymax float64, nx, ny int, ...) (X, Y, Z, U, V [][]float64)
- func MeshGrid2dV(xVals, yVals []float64) (X, Y [][]float64)
- func Min(a, b float64) float64
- func MinMax(v []float64) (mi, ma float64)
- func NonlinSpace(xa, xb float64, N int, R float64, symmetric bool) (x []float64)
- func Ones(n int) (res []float64)
- func ParetoFront(Ovs [][]float64) (front []int)
- func ParetoMin(u, v []float64) (uDominates, vDominates bool)
- func ParetoMinProb(u, v []float64, φ float64) (uDominates bool)
- func PrintDeep3(name string, A [][][]float64)
- func PrintDeep4(name string, A [][][][]float64, format string)
- func PrintMemStat(msg string)
- func ProbContestSmall(u, v, φ float64) float64
- func Prof(mem, silent bool) func()
- func ProfCPU(dirout, filename string, silent bool) func()
- func ProfMEM(dirout, filename string, silent bool) func()
- func Qsort(arr []float64)
- func Qsort2(arr, brr []float64)
- func Scaling(s, x []float64, ds, tol float64, reverse, useinds bool) (xmin, xmax float64)
- func Sort3(a, b, c *float64)
- func Sort3Desc(a, b, c *float64)
- func Sort4(a, b, c, d *float64)
- func SortQuadruples(i []int, x, y, z []float64, by string) (I []int, X, Y, Z []float64)
- func StrAlloc(m, n int) (mat [][]string)
- func StrBoolMapSort(m map[string]bool) (sortedKeys []string)
- func StrBoolMapSortSplit(m map[string]bool) (sortedKeys []string, sortedVals []bool)
- func StrFltMapSort(m map[string]float64) (sortedKeys []string)
- func StrFltMapSortSplit(m map[string]float64) (sortedKeys []string, sortedVals []float64)
- func StrFltsMapAppend(m map[string][]float64, key string, item float64)
- func StrIndexSmall(a []string, val string) int
- func StrIntMapSort(m map[string]int) (sortedKeys []string)
- func StrIntMapSortSplit(m map[string]int) (sortedKeys []string, sortedVals []int)
- func StrIntsMapAppend(m map[string][]int, key string, item int)
- func StrVals(n int, val string) (s []string)
- func Sum(v []float64) (sum float64)
- func Swap(a, b *float64)
- func ToStrings(v []float64, format string) (s []string)
- func Vals(n int, v float64) (res []float64)
- type Decoder
- type Encoder
- type List
- type OutFcnType
- type Outputter
- type Quadruple
- type Quadruples
- type QuadruplesByI
- type QuadruplesByX
- type QuadruplesByY
- type QuadruplesByZ
- type SerialList
- type Sorter
Constants ¶
const ( // SQ2 = sqrt(2) [https://oeis.org/A002193] SQ2 = 1.41421356237309504880168872420969807856967187537694807317667974 // SQ3 = sqrt(3) [https://oeis.org/A002194] SQ3 = 1.73205080756887729352744634150587236694280525381038062805580698 // SQ5 = sqrt(5) [https://oeis.org/A002163] SQ5 = 2.23606797749978969640917366873127623544061835961152572427089724 // SQ6 = sqrt(6) [https://oeis.org/A010464] SQ6 = 2.44948974278317809819728407470589139196594748065667012843269257 // SQ7 = sqrt(7) [https://oeis.org/A010465] SQ7 = 2.64575131106459059050161575363926042571025918308245018036833446 // SQ8 = sqrt(8) [https://oeis.org/A010466] SQ8 = 2.82842712474619009760337744841939615713934375075389614635335947 )
Variables ¶
This section is empty.
Functions ¶
func ArrayToMat ¶
ArrayToMat converts a column-major array to a matrix
func BestSquare ¶
BestSquare finds the best square for given size=Nrows * Ncolumns
func Cross3d ¶
func Cross3d(w, u, v []float64)
Cross3d computes the cross product of two 3D vectors u and w
w = u cross v Note: w must be pre-allocated
func CumSum ¶
func CumSum(cs, p []float64)
CumSum returns the cumulative sum of the elements in p
Input: p -- values Output: cs -- cumulated sum; pre-allocated with len(cs) == len(p)
func Deep2checkSize ¶
Deep2checkSize checks if dimensions of Deep2 slice are correct
func Deep2transpose ¶
Deep2transpose returns the transpose of a deep2 slice
func Deep3Deserialize ¶
Deep3Deserialize deserializes an array of array of array in column-compressed format
Example:
func Deep3Serialize ¶
Deep3Serialize serializes an array of array of array in column-compressed format
Example:
func Deep3alloc ¶
Deep3alloc allocates a slice of slice of slice
func Deep3checkSize ¶
Deep3checkSize checks if dimensions of Deep3 slice are correct
func Deep4alloc ¶
Deep4alloc allocates a slice of slice of slice of slice
func DurSum ¶
DurSum sums all seconds in v
NOTE: this is not efficient and should be used for small slices only
func FromString ¶
FromString splits a string with numbers separeted by spaces into float64
func FromStrings ¶
FromStrings converts a slice of strings to a slice of float64
func GetITout ¶
GetITout returns indices and output times
Input: all_output_times -- array with all output times. ex: [0,0.1,0.2,0.22,0.3,0.4] time_stations_out -- time stations for output: ex: [0,0.2,0.4] tol -- tolerance to compare times Output: iout -- indices of times in all_output_times tout -- times corresponding to iout Notes: use -1 in all_output_times to enforce output of last timestep
func GetMapped2 ¶
GetMapped2 returns a new slice of slice such that: Y[i][j] = filter(X[i][j])
NOTE: each row in X may have different number of columns; i.e. len(X[0]) may be != len(X[1])
func GetReversed ¶
GetReversed return a copy with reversed items
func GetStrides ¶
GetStrides returns nReq indices from 0 (inclusive) to nTotal (inclusive)
Input: nTotal -- total number of intices nReq -- required indices Example: GetStrides(2001, 5) => [0 400 800 1200 1600 2000 2001] NOTE: GetStrides will always include nTotal as the last item in I
func GtPenalty ¶
GtPenalty implements a 'greater than' penalty function where x must be greater than b; otherwise the error is magnified
func GtePenalty ¶
GtePenalty implements a 'greater than or equal' penalty function where x must be greater than b or equal to be; otherwise the error is magnified
func IntAddScalar ¶
IntAddScalar adds a scalar to all values in a slice of integers
func IntBoolMapSort ¶
IntBoolMapSort returns sorted keys of map[int]bool
func IntFilter ¶
IntFilter filters out components in slice
NOTE: this function is not efficient and should be used with small slices only
func IntGetSorted ¶
IntGetSorted returns a sorted (increasing) copy of 'A'
func IntIndexSmall ¶
IntIndexSmall finds the index of an item in a slice of ints
NOTE: this function is not efficient and should be used with small slices only; say smaller than 20
func IntIntsMapAppend ¶
IntIntsMapAppend appends a new item to a map of slice.
Note: this function creates a new slice in the map if key is not found.
func IntMinMax ¶
IntMinMax returns the maximum and minimum elements in v
NOTE: this is not efficient and should be used for small slices only
func IntNegOut ¶
IntNegOut filters out negative components in slice
NOTE: this function is not efficient and should be used with small slices only
func IntRange3 ¶
IntRange3 generates a slice of integers from start to stop (but not stop), afer each 'step'
func IsPowerOfTwo ¶
IsPowerOfTwo checks if n is power of 2; i.e. 2⁰, 2¹, 2², 2³, 2⁴, ...
func LinSpaceOpen ¶
LinSpaceOpen returns evenly spaced numbers over a specified open interval.
func MatToArray ¶
MatToArray converts a matrix into a column-major array
func MeshGrid2dF ¶
func MeshGrid2dF(xmin, xmax, ymin, ymax float64, nx, ny int, f func(x, y float64) float64) (X, Y, Z [][]float64)
MeshGrid2dF creates a grid with x-y coordinates and evaluates z=f(x,y)
X, Y, Z -- [ny][nx]
func MeshGrid2dFG ¶
func MeshGrid2dFG(xmin, xmax, ymin, ymax float64, nx, ny int, fg func(x, y float64) (z, u, v float64)) (X, Y, Z, U, V [][]float64)
MeshGrid2dFG creates a grid with x-y coordinates and evaluates (z,u,v)=fg(x,y)
X, Y, Z, U, V -- [ny][nx]
func MeshGrid2dV ¶
MeshGrid2dV creates a grid with x-y coordinates given x and y values
X, Y -- [len(yVals)][len(xVals)]
func MinMax ¶
MinMax returns the maximum and minimum elements in v
NOTE: this is not efficient and should be used for small slices only
func NonlinSpace ¶
NonlinSpace generates N points such that the ratio between the last segment (or the middle segment) to the first one is equal to a given constant R.
The ratio between the last (or middle largest) segment to the first one is: ΔxL = Δx0 ⋅ R The ratio between successive segments is k-1 Δx[k] = α ⋅ Δx[0] Unsymmetricc case: |--|-------|------------|-----------------| Δx0 ΔxL Symmetric case with odd number of spacings: |---|--------|---------------|--------|---| Δx0 ΔxL Δx0 Symmetric case with even number of spacings: |---|----------------|----------------|---| Δx0 ΔxL ΔxL Δx0
func ParetoFront ¶
ParetoFront computes the Pareto optimal front
Input: Ovs -- [nsamples][ndim] objective values Output: front -- indices of pareto front Note: this function is slow for large sets
func ParetoMin ¶
ParetoMin compares two vectors using Pareto's optimal criterion
Note: minimum dominates (is better)
func ParetoMinProb ¶
ParetoMinProb compares two vectors using Pareto's optimal criterion φ ∃ [0,1] is a scaling factor that helps v win even if it's not smaller. If φ==0, deterministic analysis is carried out. If φ==1, probabilistic analysis is carried out. As φ → 1, v "gets more help".
Note: (1) minimum dominates (is better) (2) v dominates if !uDominates
func PrintDeep3 ¶
PrintDeep3 prints an array of array of array
func PrintDeep4 ¶
PrintDeep4 prints an array of array of array
func ProbContestSmall ¶
ProbContestSmall computes the probability for a contest between u and v where u wins if it's the smaller value. φ ∃ [0,1] is a scaling factor that helps v win even if it's not smaller. If φ==0, deterministic analysis is carried out. If φ==1, probabilistic analysis is carried out. As φ → 1, v "gets more help".
func Prof ¶
func Prof(mem, silent bool) func()
Prof runs either CPU profiling or MEM profiling
INPUT: mem -- memory profiling instead of CPU profiling silent -- hide messages OUTPUT: returns a "stop()" function to be called before exiting output files are saved to "/tmp/gosl/cpu.pprof"; or "/tmp/gosl/mem.pprof" Run analysis with: go tool pprof <binary-goes-here> /tmp/gosl/cpu.pprof or go tool pprof <binary-goes-here> /tmp/gosl/mem.pprof Example of use (notice the last parentheses): func main() { defer utl.Prof(false, false)() ... }
func ProfCPU ¶
ProfCPU activates CPU profiling
OUTPUT: returns a "stop()" function to be called before exiting Example of use (notice the last parentheses): func main() { defer ProfCPU("/tmp", "cpu.pprof", true)() ... } Run analysis with: go tool pprof <binary-goes-here> /tmp/cpu.pprof
func ProfMEM ¶
ProfMEM activates memory profiling
OUTPUT: returns a "stop()" function to be called before exiting Example of use (notice the last parentheses): func main() { defer ProfMEM("/tmp", "mem.pprof", true)() ... } Run analysis with: go tool pprof <binary-goes-here> /tmp/mem.pprof
func Qsort ¶
func Qsort(arr []float64)
Qsort sort an array arr[0..n-1] into ascending numerical order using the Quicksort algorithm. arr is replaced on output by its sorted rearrangement. Normally, the optional argument m should be omitted, but if it is set to a positive value, then only the first m elements of arr are sorted. Implementation from [1]
Reference: [1] Press WH, Teukolsky SA, Vetterling WT, Fnannery BP (2007) Numerical Recipes: The Art of Scientific Computing. Third Edition. Cambridge University Press. 1235p.
func Qsort2 ¶
func Qsort2(arr, brr []float64)
Qsort2 sorts an array arr[0..n-1] into ascending order using Quicksort, while making the corresponding rearrangment of the array brr[0..n-1]. Implementation from [1]
Reference: [1] Press WH, Teukolsky SA, Vetterling WT, Fnannery BP (2007) Numerical Recipes: The Art of Scientific Computing. Third Edition. Cambridge University Press. 1235p.
func Scaling ¶
Scaling computes a scaled version of the input slice with results in [0.0, 1.0]
Input: x -- values ds -- δs value to be added to all 's' values tol -- tolerance for capturing xmax ≅ xmin reverse -- compute reverse series; i.e. 's' decreases from 1 to 0 while x goes from xmin to xmax useinds -- if (xmax-xmin)<tol, use indices to generate the 's' slice; otherwise, 's' will be filled with δs + zeros Ouptut: s -- scaled series; pre--allocated with len(s) == len(x) xmin, xmax -- min(x) and max(x)
func SortQuadruples ¶
SortQuadruples sorts i, x, y, and z by "i", "x", "y", or "z"
Note: either i, x, y, or z can be nil; i.e. at least one of them must be non nil
func StrBoolMapSort ¶
StrBoolMapSort returns sorted keys of map[string]bool
func StrBoolMapSortSplit ¶
StrBoolMapSortSplit returns sorted keys of map[string]bool and sorted values
func StrFltMapSort ¶
StrFltMapSort returns sorted keys of map[string]float64
func StrFltMapSortSplit ¶
StrFltMapSortSplit returns sorted keys of map[string]float64 and sorted values
func StrFltsMapAppend ¶
StrFltsMapAppend appends a new item to a map of slice.
Note: this function creates a new slice in the map if key is not found.
func StrIndexSmall ¶
StrIndexSmall finds the index of an item in a slice of strings
NOTE: this function is not efficient and should be used with small slices only; say smaller than 20
func StrIntMapSort ¶
StrIntMapSort returns sorted keys of map[string]int
func StrIntMapSortSplit ¶
StrIntMapSortSplit returns sorted keys of map[string]int and sorted values
func StrIntsMapAppend ¶
StrIntsMapAppend appends a new item to a map of slice.
Note: this function creates a new slice in the map if key is not found.
func Sum ¶
Sum sums all items in v
NOTE: this is not efficient and should be used for small slices only
Types ¶
type Decoder ¶
type Decoder interface {
Decode(e interface{}) error
}
Decoder defines decoders; e.g. gob or json
type Encoder ¶
type Encoder interface {
Encode(e interface{}) error
}
Encoder defines encoders; e.g. gob or json
type List ¶
type List struct {
Vals [][]float64 // values
}
List implements a tabular list with variable number of columns
Example: Vals = [][]float64{ {0.0}, {1.0, 1.1, 1.2, 1.3}, {2.0, 2.1}, {3.0, 3.1, 3.2}, }
type OutFcnType ¶
OutFcnType is a function that sets the "u" array with an output @ time "t"
type Outputter ¶
type Outputter struct { Dt float64 // time step DtOut float64 // time step for output Tmax float64 // final time (eventually increased to accommodate all time steps) Nsteps int // number of time steps Every int // increment to output after every time step Tidx int // the index of the time step for the next output Nmax int // max number of outputs Idx int // index in the output arrays for the next output == num.outputs in the end T []float64 // saved t values len = Nmax U [][]float64 // saved u values @ t. [Nmax][nu] Fcn OutFcnType // function to process output. may be nil }
Outputter helps with the output of (numerical) results
The time loop can be something like: t := 0.0 for tidx := 0; tidx < outper.Nsteps; tidx++ { t += outper.Dt ... // do something outper.MaybeNow(tidx, t) }
func NewOutputter ¶
func NewOutputter(dt, dtOut, tmax float64, nu int, outFcn OutFcnType) (o *Outputter)
NewOutputter creates a new Outputter
dt -- time step dtOut -- time step for output tmax -- final time (of simulation) outFcn -- callback function to perform output (may be nil) NOTE: a first output will be processed if outFcn != nil
type Quadruples ¶
type Quadruples []*Quadruple
Quadruples helps to sort quadruples
func BuildQuadruples ¶
func BuildQuadruples(i []int, x, y, z []float64) (q Quadruples)
BuildQuadruples initialise Quadruples with i, x, y, and z
Note: i, x, y, or z can be nil; but at least one of them must be non nil
func (Quadruples) String ¶
func (o Quadruples) String() string
String returns the string representation of Quadruples
type QuadruplesByI ¶
type QuadruplesByI struct{ Quadruples }
QuadruplesByI defines struct to sort Quadruples by I
func (QuadruplesByI) Less ¶
func (o QuadruplesByI) Less(i, j int) bool
Less compares two QuadruplesI
type QuadruplesByX ¶
type QuadruplesByX struct{ Quadruples }
QuadruplesByX defines struct to sort Quadruples by X
func (QuadruplesByX) Less ¶
func (o QuadruplesByX) Less(i, j int) bool
Less compares two QuadruplesX
type QuadruplesByY ¶
type QuadruplesByY struct{ Quadruples }
QuadruplesByY Sort Quadruples by Y
func (QuadruplesByY) Less ¶
func (o QuadruplesByY) Less(i, j int) bool
Less compares two QuadruplesY
type QuadruplesByZ ¶
type QuadruplesByZ struct{ Quadruples }
QuadruplesByZ defines struct to Sort Quadruples by Z
func (QuadruplesByZ) Less ¶
func (o QuadruplesByZ) Less(i, j int) bool
Less compares two QuadruplesZ
type SerialList ¶
SerialList implements a tabular list with variable number of columns using a serial representation
Example: 0.0 1.0 1.1 1.2 1.3 2.0 2.1 3.0 3.1 3.2 becomes: (0) (1) 2 3 4 (5) 6 (7) 8 9 (10) Vals = 0.0 | 1.0 1.1 1.2 1.3 | 2.0 2.1 | 3.0 3.1 3.2 | Ptrs = 0 1 5 7 10 Notes: len(Ptrs) = nrows + 1 Ptrs[len(Ptrs)-1] = len(Vals)
func (*SerialList) Append ¶
func (o *SerialList) Append(startRow bool, value float64)
Append appends item to SerialList
type Sorter ¶
type Sorter struct {
Index []int
}
Sorter builds an index list to sort arrays of any type.
Reference: [1] Press WH, Teukolsky SA, Vetterling WT, Fnannery BP (2007) Numerical Recipes: The Art of Scientific Computing. Third Edition. Cambridge University Press. 1235p.
func (*Sorter) GetSorted ¶
GetSorted returns a copy of array 'a' sorted according to the previously built index. NOTE: the copy may be smaller if the index was built with a smaller set
func (*Sorter) GetSortedI ¶
GetSortedI returns a copy of array 'a' sorted according to the previously built index. NOTE: the copy may be smaller if the index was built with a smaller set
func (*Sorter) Init ¶
Init builds an index indx[0..n-1] to sort an array a[0..n-1] such that a[indx[j]] is in ascending order for j=0,1,...,n-1.
Input: n -- number of items in the array to be sorted. n must be ≤ len(a) less -- a function that returns true if a[i] < a[j] Reference: [1] Press WH, Teukolsky SA, Vetterling WT, Fnannery BP (2007) Numerical Recipes: The Art of Scientific Computing. Third Edition. Cambridge University Press. 1235p.