mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
all: replace generic <> with [] - part 2 (#16536)
This commit is contained in:
@@ -6,7 +6,7 @@ import math
|
||||
// Frequency of a given number
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/frequency-distribution.html
|
||||
pub fn freq<T>(data []T, val T) int {
|
||||
pub fn freq[T](data []T, val T) int {
|
||||
if data.len == 0 {
|
||||
return 0
|
||||
}
|
||||
@@ -23,7 +23,7 @@ pub fn freq<T>(data []T, val T) int {
|
||||
// of the given input array, sum(data)/data.len
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/central-measures.html
|
||||
pub fn mean<T>(data []T) T {
|
||||
pub fn mean[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -38,7 +38,7 @@ pub fn mean<T>(data []T) T {
|
||||
// of the given input array, product(data)**1/data.len
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/numbers/geometric-mean.html
|
||||
pub fn geometric_mean<T>(data []T) T {
|
||||
pub fn geometric_mean[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -53,7 +53,7 @@ pub fn geometric_mean<T>(data []T) T {
|
||||
// of the given input array
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/numbers/harmonic-mean.html
|
||||
pub fn harmonic_mean<T>(data []T) T {
|
||||
pub fn harmonic_mean[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -67,7 +67,7 @@ pub fn harmonic_mean<T>(data []T) T {
|
||||
// median returns the middlemost value of the given input array ( input array is assumed to be sorted )
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/central-measures.html
|
||||
pub fn median<T>(sorted_data []T) T {
|
||||
pub fn median[T](sorted_data []T) T {
|
||||
if sorted_data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -82,7 +82,7 @@ pub fn median<T>(sorted_data []T) T {
|
||||
// mode calculates the highest occuring value of the given input array
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/central-measures.html
|
||||
pub fn mode<T>(data []T) T {
|
||||
pub fn mode[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -102,7 +102,7 @@ pub fn mode<T>(data []T) T {
|
||||
// rms, Root Mean Square, calculates the sqrt of the mean of the squares of the given input array
|
||||
// Based on
|
||||
// https://en.wikipedia.org/wiki/Root_mean_square
|
||||
pub fn rms<T>(data []T) T {
|
||||
pub fn rms[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -118,19 +118,19 @@ pub fn rms<T>(data []T) T {
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
[inline]
|
||||
pub fn population_variance<T>(data []T) T {
|
||||
pub fn population_variance[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
data_mean := mean<T>(data)
|
||||
return population_variance_mean<T>(data, data_mean)
|
||||
data_mean := mean[T](data)
|
||||
return population_variance_mean[T](data, data_mean)
|
||||
}
|
||||
|
||||
// population_variance_mean is the Measure of Dispersion / Spread
|
||||
// of the given input array, with the provided mean
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
pub fn population_variance_mean<T>(data []T, mean T) T {
|
||||
pub fn population_variance_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -145,18 +145,18 @@ pub fn population_variance_mean<T>(data []T, mean T) T {
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
[inline]
|
||||
pub fn sample_variance<T>(data []T) T {
|
||||
pub fn sample_variance[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
data_mean := mean<T>(data)
|
||||
return sample_variance_mean<T>(data, data_mean)
|
||||
data_mean := mean[T](data)
|
||||
return sample_variance_mean[T](data, data_mean)
|
||||
}
|
||||
|
||||
// sample_variance calculates the spread of dataset around the provided mean
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
pub fn sample_variance_mean<T>(data []T, mean T) T {
|
||||
pub fn sample_variance_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -171,22 +171,22 @@ pub fn sample_variance_mean<T>(data []T, mean T) T {
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
[inline]
|
||||
pub fn population_stddev<T>(data []T) T {
|
||||
pub fn population_stddev[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
return math.sqrt(population_variance<T>(data))
|
||||
return math.sqrt(population_variance[T](data))
|
||||
}
|
||||
|
||||
// population_stddev_mean calculates how spread out the dataset is, with the provide mean
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
[inline]
|
||||
pub fn population_stddev_mean<T>(data []T, mean T) T {
|
||||
pub fn population_stddev_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
return T(math.sqrt(f64(population_variance_mean<T>(data, mean))))
|
||||
return T(math.sqrt(f64(population_variance_mean[T](data, mean))))
|
||||
}
|
||||
|
||||
// Measure of Dispersion / Spread
|
||||
@@ -194,11 +194,11 @@ pub fn population_stddev_mean<T>(data []T, mean T) T {
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
[inline]
|
||||
pub fn sample_stddev<T>(data []T) T {
|
||||
pub fn sample_stddev[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
return T(math.sqrt(f64(sample_variance<T>(data))))
|
||||
return T(math.sqrt(f64(sample_variance[T](data))))
|
||||
}
|
||||
|
||||
// Measure of Dispersion / Spread
|
||||
@@ -206,29 +206,29 @@ pub fn sample_stddev<T>(data []T) T {
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/standard-deviation.html
|
||||
[inline]
|
||||
pub fn sample_stddev_mean<T>(data []T, mean T) T {
|
||||
pub fn sample_stddev_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
return T(math.sqrt(f64(sample_variance_mean<T>(data, mean))))
|
||||
return T(math.sqrt(f64(sample_variance_mean[T](data, mean))))
|
||||
}
|
||||
|
||||
// absdev calculates the average distance between each data point and the mean
|
||||
// Based on
|
||||
// https://en.wikipedia.org/wiki/Average_absolute_deviation
|
||||
[inline]
|
||||
pub fn absdev<T>(data []T) T {
|
||||
pub fn absdev[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
data_mean := mean<T>(data)
|
||||
return absdev_mean<T>(data, data_mean)
|
||||
data_mean := mean[T](data)
|
||||
return absdev_mean[T](data, data_mean)
|
||||
}
|
||||
|
||||
// absdev_mean calculates the average distance between each data point and the provided mean
|
||||
// Based on
|
||||
// https://en.wikipedia.org/wiki/Average_absolute_deviation
|
||||
pub fn absdev_mean<T>(data []T, mean T) T {
|
||||
pub fn absdev_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -241,16 +241,16 @@ pub fn absdev_mean<T>(data []T, mean T) T {
|
||||
|
||||
// tts, Sum of squares, calculates the sum over all squared differences between values and overall mean
|
||||
[inline]
|
||||
pub fn tss<T>(data []T) T {
|
||||
pub fn tss[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
data_mean := mean<T>(data)
|
||||
return tss_mean<T>(data, data_mean)
|
||||
data_mean := mean[T](data)
|
||||
return tss_mean[T](data, data_mean)
|
||||
}
|
||||
|
||||
// tts_mean, Sum of squares, calculates the sum over all squared differences between values and the provided mean
|
||||
pub fn tss_mean<T>(data []T, mean T) T {
|
||||
pub fn tss_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -262,7 +262,7 @@ pub fn tss_mean<T>(data []T, mean T) T {
|
||||
}
|
||||
|
||||
// min finds the minimum value from the dataset
|
||||
pub fn min<T>(data []T) T {
|
||||
pub fn min[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -276,7 +276,7 @@ pub fn min<T>(data []T) T {
|
||||
}
|
||||
|
||||
// max finds the maximum value from the dataset
|
||||
pub fn max<T>(data []T) T {
|
||||
pub fn max[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -290,7 +290,7 @@ pub fn max<T>(data []T) T {
|
||||
}
|
||||
|
||||
// minmax finds the minimum and maximum value from the dataset
|
||||
pub fn minmax<T>(data []T) (T, T) {
|
||||
pub fn minmax[T](data []T) (T, T) {
|
||||
if data.len == 0 {
|
||||
return T(0), T(0)
|
||||
}
|
||||
@@ -308,7 +308,7 @@ pub fn minmax<T>(data []T) (T, T) {
|
||||
}
|
||||
|
||||
// min_index finds the first index of the minimum value
|
||||
pub fn min_index<T>(data []T) int {
|
||||
pub fn min_index[T](data []T) int {
|
||||
if data.len == 0 {
|
||||
return 0
|
||||
}
|
||||
@@ -324,7 +324,7 @@ pub fn min_index<T>(data []T) int {
|
||||
}
|
||||
|
||||
// max_index finds the first index of the maximum value
|
||||
pub fn max_index<T>(data []T) int {
|
||||
pub fn max_index[T](data []T) int {
|
||||
if data.len == 0 {
|
||||
return 0
|
||||
}
|
||||
@@ -340,7 +340,7 @@ pub fn max_index<T>(data []T) int {
|
||||
}
|
||||
|
||||
// minmax_index finds the first index of the minimum and maximum value
|
||||
pub fn minmax_index<T>(data []T) (int, int) {
|
||||
pub fn minmax_index[T](data []T) (int, int) {
|
||||
if data.len == 0 {
|
||||
return 0, 0
|
||||
}
|
||||
@@ -365,26 +365,26 @@ pub fn minmax_index<T>(data []T) (int, int) {
|
||||
// Range ( Maximum - Minimum ) of the given input array
|
||||
// Based on
|
||||
// https://www.mathsisfun.com/data/range.html
|
||||
pub fn range<T>(data []T) T {
|
||||
pub fn range[T](data []T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
min, max := minmax<T>(data)
|
||||
min, max := minmax[T](data)
|
||||
return max - min
|
||||
}
|
||||
|
||||
// covariance calculates directional association between datasets
|
||||
// positive value denotes variables move in same direction and negative denotes variables move in opposite directions
|
||||
[inline]
|
||||
pub fn covariance<T>(data1 []T, data2 []T) T {
|
||||
mean1 := mean<T>(data1)
|
||||
mean2 := mean<T>(data2)
|
||||
return covariance_mean<T>(data1, data2, mean1, mean2)
|
||||
pub fn covariance[T](data1 []T, data2 []T) T {
|
||||
mean1 := mean[T](data1)
|
||||
mean2 := mean[T](data2)
|
||||
return covariance_mean[T](data1, data2, mean1, mean2)
|
||||
}
|
||||
|
||||
// covariance_mean computes the covariance of a dataset with means provided
|
||||
// the recurrence relation
|
||||
pub fn covariance_mean<T>(data1 []T, data2 []T, mean1 T, mean2 T) T {
|
||||
pub fn covariance_mean[T](data1 []T, data2 []T, mean1 T, mean2 T) T {
|
||||
n := int(math.min(data1.len, data2.len))
|
||||
if n == 0 {
|
||||
return T(0)
|
||||
@@ -401,15 +401,15 @@ pub fn covariance_mean<T>(data1 []T, data2 []T, mean1 T, mean2 T) T {
|
||||
// lag1_autocorrelation_mean calculates the correlation between values that are one time period apart
|
||||
// of a dataset, based on the mean
|
||||
[inline]
|
||||
pub fn lag1_autocorrelation<T>(data []T) T {
|
||||
data_mean := mean<T>(data)
|
||||
return lag1_autocorrelation_mean<T>(data, data_mean)
|
||||
pub fn lag1_autocorrelation[T](data []T) T {
|
||||
data_mean := mean[T](data)
|
||||
return lag1_autocorrelation_mean[T](data, data_mean)
|
||||
}
|
||||
|
||||
// lag1_autocorrelation_mean calculates the correlation between values that are one time period apart
|
||||
// of a dataset, using
|
||||
// the recurrence relation
|
||||
pub fn lag1_autocorrelation_mean<T>(data []T, mean T) T {
|
||||
pub fn lag1_autocorrelation_mean[T](data []T, mean T) T {
|
||||
if data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
@@ -426,15 +426,15 @@ pub fn lag1_autocorrelation_mean<T>(data []T, mean T) T {
|
||||
|
||||
// kurtosis calculates the measure of the 'tailedness' of the data by finding mean and standard of deviation
|
||||
[inline]
|
||||
pub fn kurtosis<T>(data []T) T {
|
||||
data_mean := mean<T>(data)
|
||||
sd := population_stddev_mean<T>(data, data_mean)
|
||||
return kurtosis_mean_stddev<T>(data, data_mean, sd)
|
||||
pub fn kurtosis[T](data []T) T {
|
||||
data_mean := mean[T](data)
|
||||
sd := population_stddev_mean[T](data, data_mean)
|
||||
return kurtosis_mean_stddev[T](data, data_mean, sd)
|
||||
}
|
||||
|
||||
// kurtosis_mean_stddev calculates the measure of the 'tailedness' of the data
|
||||
// using the fourth moment the deviations, normalized by the sd
|
||||
pub fn kurtosis_mean_stddev<T>(data []T, mean T, sd T) T {
|
||||
pub fn kurtosis_mean_stddev[T](data []T, mean T, sd T) T {
|
||||
mut avg := T(0) // find the fourth moment the deviations, normalized by the sd
|
||||
/*
|
||||
we use a recurrence relation to stably update a running value so
|
||||
@@ -449,14 +449,14 @@ pub fn kurtosis_mean_stddev<T>(data []T, mean T, sd T) T {
|
||||
|
||||
// skew calculates the mean and standard of deviation to find the skew from the data
|
||||
[inline]
|
||||
pub fn skew<T>(data []T) T {
|
||||
data_mean := mean<T>(data)
|
||||
sd := population_stddev_mean<T>(data, data_mean)
|
||||
return skew_mean_stddev<T>(data, data_mean, sd)
|
||||
pub fn skew[T](data []T) T {
|
||||
data_mean := mean[T](data)
|
||||
sd := population_stddev_mean[T](data, data_mean)
|
||||
return skew_mean_stddev[T](data, data_mean, sd)
|
||||
}
|
||||
|
||||
// skew_mean_stddev calculates the skewness of data
|
||||
pub fn skew_mean_stddev<T>(data []T, mean T, sd T) T {
|
||||
pub fn skew_mean_stddev[T](data []T, mean T, sd T) T {
|
||||
mut skew := T(0) // find the sum of the cubed deviations, normalized by the sd.
|
||||
/*
|
||||
we use a recurrence relation to stably update a running value so
|
||||
@@ -469,7 +469,7 @@ pub fn skew_mean_stddev<T>(data []T, mean T, sd T) T {
|
||||
return skew
|
||||
}
|
||||
|
||||
pub fn quantile<T>(sorted_data []T, f T) T {
|
||||
pub fn quantile[T](sorted_data []T, f T) T {
|
||||
if sorted_data.len == 0 {
|
||||
return T(0)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user