Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
数学工具

MultiArray 的数学运算函数集合。 More...

Macros

#define CONSOLE_MATMUL_BLOCK_SIZE   128

Enumerations

enum class  console::QuantileMethod {
  console::QuantileMethod::Nearest , console::QuantileMethod::Linear , console::QuantileMethod::Midpoint , console::QuantileMethod::Lower ,
  console::QuantileMethod::Upper , console::QuantileMethod::ExcelInc , console::QuantileMethod::ExcelExc
}

Functions

template<class T, size_t... Dims>
double console::mean (const MultiArray< T, Dims... > &arr)
 计算 MultiArray 中所有元素的算术平均值。
template<class T, size_t... Dims>
double console::variance (const MultiArray< T, Dims... > &arr, bool sample=true)
 计算方差。
template<class T, size_t... Dims>
double console::stddev (const MultiArray< T, Dims... > &arr, bool sample=true)
 计算标准差。
template<class T, size_t N>
T console::dot (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个一维向量的点积。
template<class T, size_t N>
double console::norm (const MultiArray< T, N > &a)
 计算向量的欧几里得范数(L2 范数)。
template<class T, size_t N>
double console::cosine (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个向量的余弦相似度。
template<class T, size_t N>
MultiArray< T, N > console::normalize (const MultiArray< T, N > &a)
 将向量归一化为单位向量。
template<class T, size_t N>
double console::euclidean (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个向量的欧几里得距离。
template<class T, size_t N>
double console::manhattan (const MultiArray< T, N > &a, const MultiArray< T, N > &b)
 计算两个向量的曼哈顿距离(L1 距离)。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_blocked (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 矩阵乘法(二维),使用分块算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_simple (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 矩阵乘法(二维),使用简单算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_impl (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B, std::true_type)
 矩阵乘法(二维) std::true_type 特化,使用分块算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_impl (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B, std::false_type)
 矩阵乘法(二维) std::false_type 特化,使用简单算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 矩阵乘法(二维),根据 BLOCK 大小选择简单算法或分块算法。
template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_parallel (const MultiArray< T, M, N > &A, const MultiArray< T, N, K > &B)
 并行矩阵乘法(二维),使用分块算法并行计算。
template<class T, size_t M, size_t N>
MultiArray< T, N, M > console::transpose (const MultiArray< T, M, N > &A)
 矩阵转置。
template<class T, size_t N>
MultiArray< T, N, N > console::identity ()
 生成 N×N 的单位矩阵。
template<class T, size_t N>
T console::trace (const MultiArray< T, N, N > &A)
 计算方阵的迹(对角线元素之和)。
template<class T>
MultiArray< T, 3 > console::cross (const MultiArray< T, 3 > &a, const MultiArray< T, 3 > &b)
 三维向量的叉积。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::clamp (const MultiArray< T, Dims... > &arr, T low, T high)
 将数组每个元素限制在 [low, high] 范围内。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::abs (const MultiArray< T, Dims... > &arr)
 计算数组中每个元素的绝对值。
template<class T, size_t... Dims>
void console::randomize (MultiArray< T, Dims... > &arr, T min=0, T max=100)
 用均匀分布随机数填充数组。
template<class T, size_t... Dims>
void console::randomize_normal (MultiArray< T, Dims... > &arr, T mean=0, T stddev=1)
 用正态分布随机数填充数组。
template<class T, size_t... Dims>
void console::linspace (MultiArray< T, Dims... > &arr, T start, T end)
 用线性等间距值填充数组。
template<class T, size_t... Dims>
T console::product (const MultiArray< T, Dims... > &arr)
 计算所有元素的乘积。
template<class T, size_t... Dims>
T console::kth_smallest (MultiArray< T, Dims... > arr, size_t k)
 查找第 k 小的元素(会修改数组顺序)。
template<class T, size_t N, size_t K>
MultiArray< T, N+K - 1 > console::convolve1d (const MultiArray< T, N > &signal, const MultiArray< T, K > &kernel)
 一维卷积。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::sin (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::sin。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::cos (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::cos。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::tan (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::tan。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::asin (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::asin。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::acos (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::acos。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::atan (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::atan。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::sinh (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::sinh。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::cosh (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::cosh。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::tanh (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::tanh。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::exp (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::exp。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::log (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::log(自然对数)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::log10 (const MultiArray< T, Dims... > &arr)
 对数组每个元素应用 std::log10(常用对数)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::pow (const MultiArray< T, Dims... > &arr, T exponent)
 对数组每个元素取幂(常数指数)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::pow (const MultiArray< T, Dims... > &base, const MultiArray< T, Dims... > &exp)
 对数组每个元素取幂(指数也是数组,逐元素计算)。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::floor (const MultiArray< T, Dims... > &arr)
 对数组每个元素向下取整。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::ceil (const MultiArray< T, Dims... > &arr)
 对数组每个元素向上取整。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::round (const MultiArray< T, Dims... > &arr)
 对数组每个元素四舍五入。
template<class T, size_t... Dims, class CharT, class Traits = std::char_traits<CharT>>
void console::print_stats (std::basic_ostream< CharT, Traits > &os, const MultiArray< T, Dims... > &arr, const std::string &name="")
 打印数组的基本统计信息(和、均值、最小值、最大值、标准差)。
template<class T, size_t... Dims>
double console::covariance (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 计算两个数组的协方差。
template<class T, size_t... Dims>
double console::correlation (const MultiArray< T, Dims... > &a, const MultiArray< T, Dims... > &b)
 计算两个数组的相关系数。
template<class T, size_t... Dims>
double console::median (MultiArray< T, Dims... > arr)
 计算数组的中位数。
template<class T, size_t... Dims>
double console::quantile (MultiArray< T, Dims... > arr, double q, QuantileMethod method=QuantileMethod::Nearest)
 计算数组的分位数。
template<class T>
T console::det2x2 (const MultiArray< T, 2, 2 > &A)
 计算 2x2 矩阵的行列式。
template<class T>
T console::det3x3 (const MultiArray< T, 3, 3 > &A)
 计算 3x3 矩阵的行列式。
template<class T>
MultiArray< T, 2, 2 > console::inv2x2 (const MultiArray< T, 2, 2 > &A)
 计算 2x2 矩阵的逆矩阵。
template<class T>
MultiArray< T, 3, 3 > console::inv3x3 (const MultiArray< T, 3, 3 > &A)
 计算 3x3 矩阵的逆矩阵。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::sigmoid (const MultiArray< T, Dims... > &arr)
 计算 Sigmoid 激活函数。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::relu (const MultiArray< T, Dims... > &arr)
 计算 ReLU 激活函数。
template<class T, size_t... Dims>
MultiArray< T, Dims... > console::softmax (const MultiArray< T, Dims... > &arr)
 计算 Softmax 激活函数。
template<class T, size_t H, size_t W, size_t KH, size_t KW>
MultiArray< T, H - KH+1, W - KW+1 > console::convolve2d (const MultiArray< T, H, W > &image, const MultiArray< T, KH, KW > &kernel)
 执行二维卷积操作。
template<class T, size_t M, size_t N>
void console::print_matrix (std::ostream &os, const MultiArray< T, M, N > &A, const char *name=nullptr)
 打印矩阵。
template<class T, size_t N>
MultiArray< std::complex< T >, N > console::fft (const MultiArray< std::complex< T >, N > &x)
 一维 FFT(Cooley-Tukey 算法)。
template<class T, size_t N>
MultiArray< std::complex< T >, N > console::ifft (const MultiArray< std::complex< T >, N > &X)
 一维 IFFT(逆快速傅里叶变换)。
template<class T, size_t N>
MultiArray< std::complex< T >, N > console::rfft (const MultiArray< T, N > &x)
 实数 FFT(输入为实数,输出为复数频域)。
template<class T, size_t N>
MultiArray< T, N > console::irfft (const MultiArray< std::complex< T >, N > &X)
 实数 IFFT(输入为复数频域,输出为实数时域)。
template<class T, size_t N>
MultiArray< T, N/2+1 > console::spectrum (const MultiArray< T, N > &x)
 频谱(幅值谱),归一化到真实幅度。
template<class T, size_t N>
MultiArray< T, N/2+1 > console::power_spectrum (const MultiArray< T, N > &x)
 功率谱(幅值平方)。
template<class T, size_t N>
MultiArray< T, N/2+1 > console::phase_spectrum (const MultiArray< T, N > &x)
 相位谱(弧度)。
template<class T, size_t N>
MultiArray< T, N/2+1 > console::log_spectrum (const MultiArray< T, N > &x)
 对数频谱(分贝)。
template<class T, size_t M, size_t N>
MultiArray< T, M > console::matvec (const MultiArray< T, M, N > &A, const MultiArray< T, N > &x)
 矩阵-向量乘法。
template<class T, size_t M, size_t N>
MultiArray< T, M, N > console::outer (const MultiArray< T, M > &a, const MultiArray< T, N > &b)
 外积。
template<class T, size_t M, size_t N>
double console::frobenius_norm (const MultiArray< T, M, N > &A)
 矩阵范数(弗罗贝尼乌斯范数)。
template<class T, size_t M, size_t N>
T console::column_norm (const MultiArray< T, M, N > &A)
 列范数(最大列和范数)。
template<class T, size_t M, size_t N>
T console::row_norm (const MultiArray< T, M, N > &A)
 行范数(最大行和范数)。
template<class T, size_t N>
MultiArray< T, N > console::hann_window ()
 窗函数。
template<class T, size_t N>
MultiArray< T, N > console::hamming_window ()
 汉明窗。
template<class T, size_t N>
MultiArray< T, N > console::blackman_window ()
 布莱克曼窗。
template<class T, size_t N>
MultiArray< T, N > console::fftshift (const MultiArray< T, N > &x)
 FFT 移位。
template<class T, size_t N, size_t M>
MultiArray< T, N+M - 1 > console::cross_correlation (const MultiArray< T, N > &a, const MultiArray< T, M > &b)
 互相关。

Detailed Description

MultiArray 的数学运算函数集合。

Macro Definition Documentation

◆ CONSOLE_MATMUL_BLOCK_SIZE

#define CONSOLE_MATMUL_BLOCK_SIZE   128

Enumeration Type Documentation

◆ QuantileMethod

enum class console::QuantileMethod
strong

分位数计算方法。

Enumerator
Nearest 

取最近的元素(默认)

Linear 

线性插值(NumPy 默认)

Midpoint 

取两个值的中点

Lower 

取下界

Upper 

取上界

ExcelInc 

PERCENTILE.INC.

ExcelExc 

PERCENTILE.EXC.

Function Documentation

◆ abs()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::abs ( const MultiArray< T, Dims... > & arr)

计算数组中每个元素的绝对值。

Template Parameters
T元素类型(应为有符号数值类型)。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 绝对值数组。

◆ acos()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::acos ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::acos。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ asin()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::asin ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::asin。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ atan()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::atan ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::atan。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ blackman_window()

template<class T, size_t N>
MultiArray< T, N > console::blackman_window ( )

布莱克曼窗。

Template Parameters
T浮点类型。
N窗函数长度。
Returns
窗函数。

◆ ceil()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::ceil ( const MultiArray< T, Dims... > & arr)

对数组每个元素向上取整。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ clamp()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::clamp ( const MultiArray< T, Dims... > & arr,
T low,
T high )

将数组每个元素限制在 [low, high] 范围内。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
low下限。
high上限。
Returns
MultiArray<T, Dims...> 裁剪后的新数组。

◆ column_norm()

template<class T, size_t M, size_t N>
T console::column_norm ( const MultiArray< T, M, N > & A)

列范数(最大列和范数)。

Template Parameters
T浮点类型。
M矩阵行数。
N矩阵列数。
Parameters
A矩阵。
Returns
范数值。

◆ convolve1d()

template<class T, size_t N, size_t K>
MultiArray< T, N+K - 1 > console::convolve1d ( const MultiArray< T, N > & signal,
const MultiArray< T, K > & kernel )

一维卷积。

Template Parameters
T元素类型。
N信号长度。
K卷积核长度。
Parameters
signal信号数组。
kernel卷积核数组。
Returns
MultiArray<T, N + K - 1> 卷积结果(full 模式)。

◆ convolve2d()

template<class T, size_t H, size_t W, size_t KH, size_t KW>
MultiArray< T, H - KH+1, W - KW+1 > console::convolve2d ( const MultiArray< T, H, W > & image,
const MultiArray< T, KH, KW > & kernel )

执行二维卷积操作。

Template Parameters
T浮点类型。
H输入图像高度。
W输入图像宽度。
KH卷积核高度。
KW卷积核宽度。
Parameters
image输入图像。
kernel卷积核。
Returns
卷积结果。

◆ correlation()

template<class T, size_t... Dims>
double console::correlation ( const MultiArray< T, Dims... > & a,
const MultiArray< T, Dims... > & b )

计算两个数组的相关系数。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
a第一个数组。
b第二个数组。
Returns
相关系数值。

◆ cos()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::cos ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::cos。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ cosh()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::cosh ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::cosh。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ cosine()

template<class T, size_t N>
double console::cosine ( const MultiArray< T, N > & a,
const MultiArray< T, N > & b )

计算两个向量的余弦相似度。

Template Parameters
T元素类型。
N向量长度。
Parameters
a向量 a。
b向量 b。
Returns
double 余弦值(范围 [-1, 1])。

◆ covariance()

template<class T, size_t... Dims>
double console::covariance ( const MultiArray< T, Dims... > & a,
const MultiArray< T, Dims... > & b )

计算两个数组的协方差。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
a第一个数组。
b第二个数组。
Returns
协方差值。

◆ cross()

template<class T>
MultiArray< T, 3 > console::cross ( const MultiArray< T, 3 > & a,
const MultiArray< T, 3 > & b )

三维向量的叉积。

Template Parameters
T元素类型。
Parameters
a向量 a(长度为 3)。
b向量 b(长度为 3)。
Returns
MultiArray<T, 3> 叉积结果。

◆ cross_correlation()

template<class T, size_t N, size_t M>
MultiArray< T, N+M - 1 > console::cross_correlation ( const MultiArray< T, N > & a,
const MultiArray< T, M > & b )

互相关。

Template Parameters
T浮点类型。
N数组长度。
M数组长度。
Parameters
a数组。
b数组。
Returns
互相关结果。

◆ det2x2()

template<class T>
T console::det2x2 ( const MultiArray< T, 2, 2 > & A)

计算 2x2 矩阵的行列式。

Template Parameters
T浮点类型。
Parameters
A输入矩阵。
Returns
行列式值。

◆ det3x3()

template<class T>
T console::det3x3 ( const MultiArray< T, 3, 3 > & A)

计算 3x3 矩阵的行列式。

Template Parameters
T浮点类型。
Parameters
A输入矩阵。
Returns
行列式值。

◆ dot()

template<class T, size_t N>
T console::dot ( const MultiArray< T, N > & a,
const MultiArray< T, N > & b )

计算两个一维向量的点积。

Template Parameters
T元素类型。
N向量长度。
Parameters
a向量 a。
b向量 b。
Returns
T 点积结果。

◆ euclidean()

template<class T, size_t N>
double console::euclidean ( const MultiArray< T, N > & a,
const MultiArray< T, N > & b )

计算两个向量的欧几里得距离。

Template Parameters
T元素类型。
N向量长度。
Parameters
a向量 a。
b向量 b。
Returns
double 欧氏距离。

◆ exp()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::exp ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::exp。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ fft()

template<class T, size_t N>
MultiArray< std::complex< T >, N > console::fft ( const MultiArray< std::complex< T >, N > & x)

一维 FFT(Cooley-Tukey 算法)。

Template Parameters
T浮点类型(float/double)。
Parameters
x输入信号(时域),长度必须是 2 的幂。
Returns
MultiArray<std::complex<T>, N> 频域结果。

◆ fftshift()

template<class T, size_t N>
MultiArray< T, N > console::fftshift ( const MultiArray< T, N > & x)

FFT 移位。

Template Parameters
T浮点类型。
N数组长度。
Parameters
x数组。
Returns
移位后的数组。

◆ floor()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::floor ( const MultiArray< T, Dims... > & arr)

对数组每个元素向下取整。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ frobenius_norm()

template<class T, size_t M, size_t N>
double console::frobenius_norm ( const MultiArray< T, M, N > & A)

矩阵范数(弗罗贝尼乌斯范数)。

Template Parameters
T浮点类型。
M矩阵行数。
N矩阵列数。
Parameters
A矩阵。
Returns
范数值。

◆ hamming_window()

template<class T, size_t N>
MultiArray< T, N > console::hamming_window ( )

汉明窗。

Template Parameters
T浮点类型。
N窗函数长度。
Returns
窗函数。

◆ hann_window()

template<class T, size_t N>
MultiArray< T, N > console::hann_window ( )

窗函数。

Template Parameters
T浮点类型。
N窗函数长度。
Returns
窗函数。

◆ identity()

template<class T, size_t N>
MultiArray< T, N, N > console::identity ( )

生成 N×N 的单位矩阵。

Template Parameters
T元素类型。
N矩阵阶数。
Returns
MultiArray<T, N, N> 单位矩阵。

◆ ifft()

template<class T, size_t N>
MultiArray< std::complex< T >, N > console::ifft ( const MultiArray< std::complex< T >, N > & X)

一维 IFFT(逆快速傅里叶变换)。

Template Parameters
T浮点类型(float/double)。
Parameters
X输入信号(频域)。
Returns
MultiArray<std::complex<T>, N> 时域结果。

◆ inv2x2()

template<class T>
MultiArray< T, 2, 2 > console::inv2x2 ( const MultiArray< T, 2, 2 > & A)

计算 2x2 矩阵的逆矩阵。

Template Parameters
T浮点类型。
Parameters
A输入矩阵。
Returns
逆矩阵。

◆ inv3x3()

template<class T>
MultiArray< T, 3, 3 > console::inv3x3 ( const MultiArray< T, 3, 3 > & A)

计算 3x3 矩阵的逆矩阵。

Template Parameters
T浮点类型。
Parameters
A输入矩阵。
Returns
逆矩阵。

◆ irfft()

template<class T, size_t N>
MultiArray< T, N > console::irfft ( const MultiArray< std::complex< T >, N > & X)

实数 IFFT(输入为复数频域,输出为实数时域)。

Template Parameters
T浮点类型(float/double)。
Parameters
X输入频域信号。
Returns
MultiArray<T, N> 时域结果(实数部分)。

◆ kth_smallest()

template<class T, size_t... Dims>
T console::kth_smallest ( MultiArray< T, Dims... > arr,
size_t k )

查找第 k 小的元素(会修改数组顺序)。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组(将部分排序,顺序改变)。
k索引(0-based),若超出范围则取最大索引。
Returns
T 第 k 小的元素值。

◆ linspace()

template<class T, size_t... Dims>
void console::linspace ( MultiArray< T, Dims... > & arr,
T start,
T end )

用线性等间距值填充数组。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr目标数组(其 fsize() 决定点数)。
start起始值。
end结束值(包含)。

◆ log()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::log ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::log(自然对数)。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ log10()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::log10 ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::log10(常用对数)。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ log_spectrum()

template<class T, size_t N>
MultiArray< T, N/2+1 > console::log_spectrum ( const MultiArray< T, N > & x)

对数频谱(分贝)。

Template Parameters
T浮点类型。
N长度。
Parameters
x输入信号。
Returns
MultiArray<T, N / 2 + 1> 对数频谱(dB)。

◆ manhattan()

template<class T, size_t N>
double console::manhattan ( const MultiArray< T, N > & a,
const MultiArray< T, N > & b )

计算两个向量的曼哈顿距离(L1 距离)。

Template Parameters
T元素类型。
N向量长度。
Parameters
a向量 a。
b向量 b。
Returns
double 曼哈顿距离。

◆ matmul()

template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul ( const MultiArray< T, M, N > & A,
const MultiArray< T, N, K > & B )
inline

矩阵乘法(二维),根据 BLOCK 大小选择简单算法或分块算法。

Template Parameters
T元素类型。
M矩阵 A 的行数。
NA 的列数(同时也是 B 的行数)。
KB 的列数。
Parameters
A左矩阵,尺寸 M×N。
B右矩阵,尺寸 N×K。
Returns
MultiArray<T, M, K> 乘积矩阵。

◆ matmul_blocked()

template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_blocked ( const MultiArray< T, M, N > & A,
const MultiArray< T, N, K > & B )

矩阵乘法(二维),使用分块算法。

Template Parameters
T元素类型。
M矩阵 A 的行数。
NA 的列数(同时也是 B 的行数)。
KB 的列数。
Parameters
A左矩阵,尺寸 M×N。
B右矩阵,尺寸 N×K。
Returns
MultiArray<T, M, K> 乘积矩阵。

◆ matmul_impl() [1/2]

template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_impl ( const MultiArray< T, M, N > & A,
const MultiArray< T, N, K > & B,
std::false_type  )
inline

矩阵乘法(二维) std::false_type 特化,使用简单算法。

Template Parameters
T元素类型。
M矩阵 A 的行数。
NA 的列数(同时也是 B 的行数)。
KB 的列数。
Parameters
A左矩阵,尺寸 M×N。
B右矩阵,尺寸 N×K。
Returns
MultiArray<T, M, K> 乘积矩阵。

◆ matmul_impl() [2/2]

template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_impl ( const MultiArray< T, M, N > & A,
const MultiArray< T, N, K > & B,
std::true_type  )
inline

矩阵乘法(二维) std::true_type 特化,使用分块算法。

Template Parameters
T元素类型。
M矩阵 A 的行数。
NA 的列数(同时也是 B 的行数)。
KB 的列数。
Parameters
A左矩阵,尺寸 M×N。
B右矩阵,尺寸 N×K。
Returns
MultiArray<T, M, K> 乘积矩阵。

◆ matmul_parallel()

template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_parallel ( const MultiArray< T, M, N > & A,
const MultiArray< T, N, K > & B )

并行矩阵乘法(二维),使用分块算法并行计算。

将输出矩阵 C 按块划分,每个块提交到线程池并行计算。 每个块内部使用分块算法优化缓存利用率。

Template Parameters
T元素类型。
M矩阵 A 的行数。
NA 的列数(同时也是 B 的行数)。
KB 的列数。
Parameters
A左矩阵,尺寸 M×N。
B右矩阵,尺寸 N×K。
Returns
MultiArray<T, M, K> 乘积矩阵。

◆ matmul_simple()

template<class T, size_t M, size_t N, size_t K>
MultiArray< T, M, K > console::matmul_simple ( const MultiArray< T, M, N > & A,
const MultiArray< T, N, K > & B )

矩阵乘法(二维),使用简单算法。

Template Parameters
T元素类型。
M矩阵 A 的行数。
NA 的列数(同时也是 B 的行数)。
KB 的列数。
Parameters
A左矩阵,尺寸 M×N。
B右矩阵,尺寸 N×K。
Returns
MultiArray<T, M, K> 乘积矩阵。

◆ matvec()

template<class T, size_t M, size_t N>
MultiArray< T, M > console::matvec ( const MultiArray< T, M, N > & A,
const MultiArray< T, N > & x )

矩阵-向量乘法。

Template Parameters
T浮点类型。
M矩阵行数。
N矩阵列数。
Parameters
A矩阵。
x向量。
Returns
结果向量。

◆ mean()

template<class T, size_t... Dims>
double console::mean ( const MultiArray< T, Dims... > & arr)

计算 MultiArray 中所有元素的算术平均值。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
double 平均值。

◆ median()

template<class T, size_t... Dims>
double console::median ( MultiArray< T, Dims... > arr)

计算数组的中位数。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
arr输入数组。
Returns
中位数值。

◆ norm()

template<class T, size_t N>
double console::norm ( const MultiArray< T, N > & a)

计算向量的欧几里得范数(L2 范数)。

Template Parameters
T元素类型。
N向量长度。
Parameters
a输入向量。
Returns
double 范数值。

◆ normalize()

template<class T, size_t N>
MultiArray< T, N > console::normalize ( const MultiArray< T, N > & a)

将向量归一化为单位向量。

Template Parameters
T元素类型。
N向量长度。
Parameters
a输入向量。
Returns
MultiArray<T, N> 归一化后的向量(若原范数为 0,返回原向量)。

◆ outer()

template<class T, size_t M, size_t N>
MultiArray< T, M, N > console::outer ( const MultiArray< T, M > & a,
const MultiArray< T, N > & b )

外积。

Template Parameters
T浮点类型。
M矩阵行数。
N矩阵列数。
Parameters
a向量。
b向量。
Returns
结果矩阵。

◆ phase_spectrum()

template<class T, size_t N>
MultiArray< T, N/2+1 > console::phase_spectrum ( const MultiArray< T, N > & x)

相位谱(弧度)。

Template Parameters
T浮点类型。
N长度。
Parameters
x输入信号。
Returns
MultiArray<T, N / 2 + 1> 相位谱(弧度)。

◆ pow() [1/2]

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::pow ( const MultiArray< T, Dims... > & arr,
T exponent )

对数组每个元素取幂(常数指数)。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
exponent指数(常数)。
Returns
MultiArray<T, Dims...> 结果数组。

◆ pow() [2/2]

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::pow ( const MultiArray< T, Dims... > & base,
const MultiArray< T, Dims... > & exp )

对数组每个元素取幂(指数也是数组,逐元素计算)。

Template Parameters
T元素类型。
Dims维度包。
Parameters
base底数数组。
exp指数数组(必须与 base 形状相同)。
Returns
MultiArray<T, Dims...> 结果数组。

◆ power_spectrum()

template<class T, size_t N>
MultiArray< T, N/2+1 > console::power_spectrum ( const MultiArray< T, N > & x)

功率谱(幅值平方)。

Template Parameters
T浮点类型。
N长度。
Parameters
x输入信号。
Returns
MultiArray<T, N / 2 + 1> 功率谱。

◆ print_matrix()

template<class T, size_t M, size_t N>
void console::print_matrix ( std::ostream & os,
const MultiArray< T, M, N > & A,
const char * name = nullptr )

打印矩阵。

Template Parameters
T浮点类型。
M矩阵行数。
N矩阵列数。
Parameters
os输出流。
A矩阵。
name矩阵名称(可选)。

◆ print_stats()

template<class T, size_t... Dims, class CharT, class Traits = std::char_traits<CharT>>
void console::print_stats ( std::basic_ostream< CharT, Traits > & os,
const MultiArray< T, Dims... > & arr,
const std::string & name = "" )

打印数组的基本统计信息(和、均值、最小值、最大值、标准差)。

Template Parameters
T元素类型。
Dims维度包。
Parameters
os发送到的输出流。
arr输入数组。
name数组名称(可选),若提供则打印标题。

◆ product()

template<class T, size_t... Dims>
T console::product ( const MultiArray< T, Dims... > & arr)

计算所有元素的乘积。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
T 乘积。

◆ quantile()

template<class T, size_t... Dims>
double console::quantile ( MultiArray< T, Dims... > arr,
double q,
QuantileMethod method = QuantileMethod::Nearest )

计算数组的分位数。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
arr输入数组。
q分位数位置(0 到 1 之间)。
method分位数计算方法(默认为 Nearest)。
Returns
分位数值。

◆ randomize()

template<class T, size_t... Dims>
void console::randomize ( MultiArray< T, Dims... > & arr,
T min = 0,
T max = 100 )

用均匀分布随机数填充数组。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr目标数组。
min最小值(包含)。
max最大值(包含)。

◆ randomize_normal()

template<class T, size_t... Dims>
void console::randomize_normal ( MultiArray< T, Dims... > & arr,
T mean = 0,
T stddev = 1 )

用正态分布随机数填充数组。

Template Parameters
T元素类型(通常为浮点数)。
Dims维度包。
Parameters
arr目标数组。
mean均值。
stddev标准差。

◆ relu()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::relu ( const MultiArray< T, Dims... > & arr)

计算 ReLU 激活函数。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
arr输入数组。
Returns
激活后的数组。

◆ rfft()

template<class T, size_t N>
MultiArray< std::complex< T >, N > console::rfft ( const MultiArray< T, N > & x)

实数 FFT(输入为实数,输出为复数频域)。

Template Parameters
T浮点类型(float/double)。
Parameters
x输入实数信号。
Returns
MultiArray<std::complex<T>, N> 频域结果。

◆ round()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::round ( const MultiArray< T, Dims... > & arr)

对数组每个元素四舍五入。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ row_norm()

template<class T, size_t M, size_t N>
T console::row_norm ( const MultiArray< T, M, N > & A)

行范数(最大行和范数)。

Template Parameters
T浮点类型。
M矩阵行数。
N矩阵列数。
Parameters
A矩阵。
Returns
范数值。

◆ sigmoid()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::sigmoid ( const MultiArray< T, Dims... > & arr)

计算 Sigmoid 激活函数。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
arr输入数组。
Returns
激活后的数组。

◆ sin()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::sin ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::sin。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ sinh()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::sinh ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::sinh。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ softmax()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::softmax ( const MultiArray< T, Dims... > & arr)

计算 Softmax 激活函数。

Template Parameters
T浮点类型。
Dims维度包。
Parameters
arr输入数组。
Returns
激活后的数组。

◆ spectrum()

template<class T, size_t N>
MultiArray< T, N/2+1 > console::spectrum ( const MultiArray< T, N > & x)

频谱(幅值谱),归一化到真实幅度。

Template Parameters
T浮点类型。
N长度。
Parameters
x输入信号。
Returns
MultiArray<T, N / 2 + 1> 幅值谱(只返回正频率部分)。
Note
直流分量和奈奎斯特频率除以 N,其他正频率除以 N/2。

◆ stddev()

template<class T, size_t... Dims>
double console::stddev ( const MultiArray< T, Dims... > & arr,
bool sample = true )

计算标准差。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
sample若为 true,计算样本标准差(除以 n-1 的方差开根);否则总体标准差。
Returns
double 标准差。

◆ tan()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::tan ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::tan。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ tanh()

template<class T, size_t... Dims>
MultiArray< T, Dims... > console::tanh ( const MultiArray< T, Dims... > & arr)

对数组每个元素应用 std::tanh。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
Returns
MultiArray<T, Dims...> 结果数组。

◆ trace()

template<class T, size_t N>
T console::trace ( const MultiArray< T, N, N > & A)

计算方阵的迹(对角线元素之和)。

Template Parameters
T元素类型。
N矩阵阶数。
Parameters
A方阵。
Returns
T 迹。

◆ transpose()

template<class T, size_t M, size_t N>
MultiArray< T, N, M > console::transpose ( const MultiArray< T, M, N > & A)

矩阵转置。

Template Parameters
T元素类型。
M原矩阵行数。
N原矩阵列数。
Parameters
A输入矩阵,尺寸 M×N。
Returns
MultiArray<T, N, M> 转置矩阵,尺寸 N×M。

◆ variance()

template<class T, size_t... Dims>
double console::variance ( const MultiArray< T, Dims... > & arr,
bool sample = true )

计算方差。

Template Parameters
T元素类型。
Dims维度包。
Parameters
arr输入数组。
sample若为 true(默认),计算样本方差(除以 n-1);若为 false,计算总体方差(除以 n)。
Returns
double 方差。