贡献者: addis
先给一个具体的例程
#include "SLISC/arithmetic.h"
int main()
{
VecDoub v(4); // 长度为 4 的 double 矢量
linspace(v, 1, 4); // 等间距赋值, v = [1,2,3,4]
cout << "max(v) = " << max(v) << endl; // 最大值 (4)
cout << "sum_abs(v) = " << sum_abs(v) << endl; // 绝对值求和 (10)
cout << "norm2(v) = " << norm2(v) << endl; // 绝对值平方和
resize_cpy(v, 6); // 长度变为 6, 保留前 4 个元素的值
}
以下简单列出 arithmetic.h
中的函数,用于对矩阵进行基本运算。以下 T
代表某种容器类型,T1
代表另一种容器类型,Ts
代表某种标量类型,Tr
代表某种实数类型。
Long size(T_I v)
相当于 std::vector
的 .size()
,但返回 Long
类型,这是为了避免使用 unsigned
类型。
Tr sum_abs(T_I v)
绝对值求和 $\sum_i \left\lvert v_i \right\rvert $
Ts max(T_I v)
,Ts min(T_I v)
最大元素和最小元素
Ts max(Long_O ind, T_I v)
,Ts min(Long_O ind, T_I v)
最大元素和最小元素(同时求出其位置)
Tr max_abs(T_I v)
最大绝对值
void mod(T_O v, T1_I v1, Ts1_I s)
求余
void mod(T1_O v, Ts1_I s)
求余
void real(T_O v, T1_I v1)
提取实部
void imag(T_O v, T1_I v1)
提取虚部
void abs(T_IO v)
求绝对值
void abs(T_O v, T1_I v1)
求绝对值
Tret sum(T_I v)
求和
Tret prod(T_I v)
求积
Tr norm2(T_I v)
绝对值平方和
Tr norm(T_I a)
绝对值平方和再开根号
void resize_cpy(Tv_IO v, Long_I N, T_I val = 0)
矢量改变尺寸保留数据(多出数据初始化为 0)
void resize_cpy(Tv_IO v, Long_I N0, Long_I N1, T_I val = 0)
矩阵改变尺寸保留数据(多出数据初始化为 0)
void resize_cpy(Tv_IO v, Long_I N0, Long_I N1, Long_I N2, T_I val = 0)
3D 改变尺寸保留数据(多出数据初始化为 0)
void linspace(Tv_O v, Ts_I first, Ts_I last)
等间距赋值
void flip(Tv_IO v)
矢量翻转
void flip(T_O v, T1_I v1)
矢量翻转
void reorder(Tv_O v, To_I order)
矢量重新排序
void trans(T_IO v)
方矩阵转置
void trans(T_O v, T1_I v1)
矩阵转置
void conj(T_IO v)
共轭
void conj(T_O v, T1_I v1)
共轭
void her(T_IO v)
厄米共轭
void her(T_O v, T1_I v1)
厄米共轭
void operator+=(T_IO v, Ts_I s)
,void operator-=(T_IO v, Ts_I s)
,void operator*=(T_IO v, Ts_I s)
,void operator/=(T_IO v, Ts_I s)
矩阵和标量的四则运算
void operator+=(T_O &v, T1_I v1)
,void operator+=(T_O &v, T1_I v1)
,void operator-=(T_O &v, T1_I v1)
,void operator*=(T_O &v, T1_I v1)
,void operator/=(T_O &v, T1_I v1)
矩阵和矩阵的四则运算
void plus(T_O v, T1_I v1, Ts2_I s)
,void minus(T_O v, T1_I v1, Ts2_I s)
,void times(T_O v, T1_I v1, Ts2_I s)
,void divide(T_O v, T1_I v1, Ts2_I s)
矩阵和标量的四则运算
void pow(T_IO v, Ts_I s)
幂运算
void pow(T_O v, T1_I v1, Ts_I s)
幂运算
T dot(T1_I v1, T2_I v2)
点乘(内积)
void cumsum(T_O v, T1_I v1)
累积求和
void mul(T_O y, T1_I a, T2_I x)
矩阵乘矢量
void mul(T_IO y, T1_I a, T2_I x, Ts1_I alpha, Ts_I beta)
矩阵乘矢量(慢)
void mul(T_O &y, T1_I x, T2_I a)
行矢量乘矩阵(慢)
void mul_gen(Ty_O y, Ta_I a, Tx_I &x)
一般矩阵乘矢量(使用 BLAS)
void mul_gen(Ty_O &y, Ta_I a, Tx_I x, Tsa_I alpha = 1, Tsa_I beta = 0)
一般矩阵乘矢量(使用 BLAS)
void mul_sym(Ty_IO &y, Ta_I a, Tx_I x, Tsa_I alpha = 1, Tsa_I beta = 0)
对称矩阵乘矢量(使用 BLAS)
void uniq_elm(T_IO v)
找出不相同的元素(自动 resize)
void uniq_rows(T_O a, T1_I a1)
找出不相同的行
void exp(T_IO v)
指数函数
void exp(T_O v, T1_I v1)
指数函数