Armadillo:C++线性代数运行库的版本更迭史

API 添加和更改的历史记录

API 稳定性和版本政策:

犰狳的每个版本都有其公共 API(函数、类、常量),这些 API 在特定于该版本的随附 API 文档中进行了描述。

每个版本的犰狳都有其完整版本指定为 A.B.C,其中 A 是主要版本号,B 是次要版本号,C 是补丁级别。 版本规范具有明确的含义(类似于语义版本控制),如下所示:

在主要版本(例如 10)中,每个次要版本(例如 10.2)都有一个公共 API,该 API 强烈要求(在源代码级别)与先前次要版本的公共 API 向后兼容。 例如,为 V10.0 编写的用户代码应适用于 V10.1、V10.2 等。 但是,后续次要版本可能比以前的次要版本具有更多功能(API 添加和扩展)。 因此,专门为版本 10.2 编写的用户代码可能不适用于 10.1。

补丁级别的增加,而主要和次要版本被保留,表明对代码和/或文档的修改,旨在在不改变公共 API 的情况下修复错误。

我们不喜欢对现有公共 API 进行更改,并且强烈希望不要破坏任何用户软件。 但是,为了允许演进,公共 API 可能会在将来的主要版本中进行更改,同时在尽可能多的情况下保持向后兼容 (例如,主要版本 11 的公共 API 可能与主要版本 10 略有不同)。

注意:上述政策仅适用于文档中描述的公共 API。 犰狳中任何未在公共 API 文档中明确描述的功能都被视为内部实现细节, 并可能更改或删除,恕不另行通知。

每个版本的添加和更改列表:

版本12.8:

通过 pinv() 和 rank() 更快地检测对称表达式
扩展 shift() 来处理稀疏矩阵
扩展conv_to,可在稀疏矩阵和密集矩阵之间进行更灵活的转换
添加了 cbrt()
以 CSV 格式保存矩阵时,整数的更紧凑表示形式

版本12.6:

将密集向量乘以稀疏矩阵的速度更快(反之亦然)
更快的 eigs_sym(), eigs_gen(), svds()
使用 OpenMP 时更快的 conv() 和 conv2()
添加了 diags() 和 spdiags(),用于从向量集生成波段矩阵

版本12.4:

添加了 norm2est() 用于查找矩阵 2 范数(谱范数)的快速估计值
添加了 vecnorm() 用于获取矩阵中每一行或每一列的向量范数

版本12.2:

通过 fft() 和 ifft() 更有效地使用 FFTW3
稀疏矩阵的就地元素乘以密集矩阵的速度更快
添加了spsolve_factoriser类,以允许重用稀疏矩阵分解来求解线性方程组

版本12.0:

通过可选使用 FFTW3 实现更快的 fft() 和 ifft()
更快的 min() 和 max()
更快的 index_min() 和 index_max()
添加了 .col_as_mat() 和 .row_as_mat(),它们返回立方体列和立方体行的矩阵表示形式
添加了加载 CSV 文件以将缺失值解释为 NaN 的选项csv_opts::strict
添加了稀疏矩阵批处理构造函数的 Form 4 选项check_for_zeros
inv() 和 inv_sympd() 带有选项,或者现在使用类似于 pinv() 的缩放阈值inv_opts::no_uglyinv_opts::allow_approx
set_cout_stream()现在是无操作;请改用选项 ARMA_WARN_LEVEL、ARMA_COUT_STREAM 或 ARMA_CERR_STREAMset_cerr_stream()

版本11.4:

具有各种形式的元素幂运算的扩展 pow()
添加了 find_nan() 以查找 NaN 元素的索引
通过 sum() 更快地处理复合表达式

版本11.2:

扩展了 randu() 和 randn() 以允许指定分布参数
在 inv() 和 inv_sympd() 中添加了选项,以禁止条件差矩阵的逆inv_opts::no_ugly
通过 inv() 和 inv_sympd() 中的选项更有效地处理秩不足矩阵inv_opts::allow_approx
通过 norm()、accu()、nonzeros() 更快地处理稀疏子矩阵列视图
通过 cond() 更快地处理对称和对角矩阵
通过 solve() 更好地检测秩缺陷矩阵

版本11.0:

添加了 inv() 和 inv_sympd() 的变体,提供 rcond(倒数条件数)
在 inv() 和 inv_sympd() 中添加了选项,以允许条件差矩阵的近似逆inv_opts::allow_approx
通过 inv() 和 inv_sympd() 更严格地处理奇异矩阵
通过 inv_sympd() 更严格地处理无症状矩阵
通过 pinv() 更严格地处理非有限矩阵
通过 solve() 对秩缺陷矩阵进行更稳健的处理
通过 rcond() 更快地处理对角矩阵
更改了 eigs_sym() 和 eigs_gen() 以使用更高质量的 RNG
如果给定的矩阵/向量具有 NaN 元素,quantile() 和 median() 现在将抛出异常

版本10.8:

通过 pinv() 和 rank() 更快地处理对称矩阵
通过 inv_sympd()、pinv()、rank() 更快地处理对角矩阵
扩展的 norm() 来处理整数向量和矩阵
添加了 datum::tau 以替换 2π

版本10.7:

更快地处理X.cols(first_col,last_col)
更快地处理复合表达式中的元素 min() 和 max()
扩展的 solve(),带有强制使用近似求解器的选项solve_opts::force_approx

版本10.6:

扩展 chol() 以选择性地使用枢轴分解
扩展了向量、矩阵和立方体构造函数,以允许通过 进行元素初始化,例如。fill::value(scalar)mat X(4,5,fill::value(123))
使用 OpenMP 时,加载 CSV 文件的速度更快
添加了 csv_opts::semicolon 选项,允许保存/加载带有分号 (;) 而不是逗号 (,) 作为分隔符的 CSV 文件

版本10.5:

添加了 .clamp() 成员函数
扩展了独立的 clamp() 函数以处理复杂值
更高效地使用 OpenMP
Vector、Matrix 和 Cube 构造函数现在默认将元素初始化为零;
元素初始化可以通过说明符禁用,例如。fill::nonemat X(4,5,fill::none)

版本10.4:

通过 log_det() 更快地处理三角矩阵
添加了对称正矩阵的对数行列式 log_det_sympd()
新增配置选项,控制发出警告消息的程度ARMA_WARN_LEVEL
减少了默认的警告信息程度,使分解失败、保存/加载失败等不再发出警告

版本10.3:

通过 pinv() 更快地处理对称正定矩阵
扩展了 .save() / .load() 以处理coord_ascii格式的密集矩阵
对于越界访问,元素访问器现在会抛出更细微的 std::out_of_range 异常,而不仅仅是 std::logic_error
提高随机数的质量

版本10.2:

更快地处理子立方体
添加了 tgamma()
添加了.brief_print()用于矩阵和立方体的删节打印
扩展了 trimatu() 和 trimatl() 的稀疏矩阵形式,以允许指定对角线分隔符
扩展的 eigs_sym() 和 eigs_gen(),具有可选的 shift-invert 模式

版本10.1:

C++11 现在是最低要求的 C++ 标准
通过 trimatu() 和 trimatl() 更快地处理复合表达式
更快的稀疏矩阵加法、减法和元素乘法
扩展稀疏子矩阵视图以处理 X.cols(vector_of_column_indices) 的非连续形式
扩展的 eigs_sym() 和 eigs_gen(),具有可选的细粒度参数

版本9.900:

对未确定/过度确定的系统进行更快的求解()
更快的 eig_gen() 和 eig_pair() 适用于大型矩阵
通过 diagvec() 和 diagmat() 更快地处理矩阵乘法表达式
通过 accu() 更快地处理关系表达式
通过 expmat()、logmat()、sqrtmat() 更快地处理症状矩阵
更快地访问稀疏子矩阵视图中的列
添加了 quantile()
添加了 powmat()
添加了 trimatu_ind() 和 trimatl_ind()
新增log_normpdf()
新增.is_zero()
添加了禁用 std::mutex 的配置选项ARMA_DONT_USE_CXX11_MUTEX
扩展了 eig_gen() 和 eig_pair() 以选择性地提供左右特征向量
扩展了 qr() 以选择性地使用透视分解
扩展了 .save() 和 .load() 以通过 csv_name(filename,header) 规范处理带有标头的 CSV 文件
更一致地检测稀疏向量表达式
将物理常量更新为 NIST 2018 CODATA 值
HDF5 v1.12 保存/加载问题的解决方法

版本9.800:

默认操作中更快的 solve();默认情况下不再应用迭代优化;用于显式启用优化solve_opts::refine
更快的 expmat()
通过 rcond() 更快地处理三角矩阵
添加了 .front() 和 .back()
添加了 .is_trimatu() 和 .is_trimatl()
新增.is_diagmat()

版本9.700:

通过 vectorise() 更快地处理立方体
通过 nonzeros() 更快地处理稀疏矩阵
更快的行index_min() 和 index_max()
扩展了 join_rows() 和 join_cols() 以处理最多 4 个矩阵的连接
扩展了 .save() 和 .load(),以允许以 CSV 格式存储稀疏矩阵
添加了 randperm() 以生成一个整数序列随机排列的向量

版本 9.600:

更快地处理稀疏子矩阵
更快地处理稀疏对角线视图
通过 symmatu() 和 symmatl() 更快地处理稀疏矩阵
通过 join_cols() 更快地处理稀疏矩阵
扩展 clamp() 以处理稀疏矩阵
添加了 .clean() 以将低于阈值的元素替换为零

版本9.500:

扩展的 solve() with 表示给定的矩阵可能是正定的solve_opts::likely_sympd
通过 solve() 和 inv() 对正定矩阵进行更稳健的自动检测
更快地处理稀疏子矩阵
展开 eigs_sym() 以在给定矩阵不对称时打印警告
扩展了 LAPACK 函数原型,以遵循 Fortran 传递约定的所谓“隐藏参数”, 为了解决 GCC 错误 90329;
使用以前的 LAPACK 函数原型,而不带“隐藏参数”,之前#define ARMA_DONT_USE_FORTRAN_HIDDEN_ARGS#include <armadillo>

版本9.400:

更快的 cov() 和 cor()
添加了 .as_col() 和 .as_row()
展开 .shed_rows() / .shed_cols() / .shed_slices() 以删除向量中指定的行/列/切片
扩展 vectorise() 以处理稀疏矩阵
扩展了 max() 和 min() 的元素版本以处理稀疏矩阵
优化了稀疏矩阵表达式的处理:稀疏 %(稀疏 +- 标量)和稀疏 /(稀疏 +- 标量)
展开 eig_sym()、chol()、expmat_sym()、logmat_sympd()、sqrtmat_sympd()、inv_sympd() 以在给定矩阵不对称时打印警告
更一致地检测载体表达

版本 9.300:

通过 trace() 更快地处理复合复矩阵表达式
更高效地处理稀疏矩阵中就地修改的元素访问
添加了 .is_sympd() 来检查矩阵是否对称/厄米特正定
添加了用于 2D 数据插值的 interp2()
添加了 expm1() 和 log1p()
.is_sorted带有选项和"strictascend""strictdescend"
扩展 eig_gen() 以选择在分解之前执行平衡

版本 9.200:

通过 rcond() 更快地处理对称正定矩阵
对大小为 ≥ 512x512 的矩阵进行更快的转置
通过 accu()、diagmat()、trace() 更快地处理复合稀疏矩阵表达式
通过 join_rows() 更快地处理稀疏矩阵
添加了 sinc()
扩展 sign() 来处理标量参数
扩展运算符 (*, %, +, −) 以处理具有不同元素类型的稀疏矩阵(例如,复数矩阵乘以实数矩阵)
扩展 conv_to() 以允许在具有不同元素类型的稀疏矩阵之间进行转换
扩展的 solve() 以选择性地允许将系统的解决方案保持在工作精度的单一性

版本 9.100:

通过 solve() 更快地处理对称/厄米特正定矩阵
更快地处理复合表达式中的 inv_sympd()
新增.is_symmetric()
新增.is_hermitian()
扩展了 spsolve() 以选择性地允许将系统的解决方案保持在工作精度的单一性
ARMA_OPTIMISE_SOLVE_BAND和ARMA_OPTIMISE_SOLVE_SYMPD的新配置选项
更智能地使用稀疏矩阵中的元素缓存

版本 8.600:

添加了 hess() 用于 Hessenberg 分解
添加了 .row()、.rows()、.col()、.cols() 到子立方体视图
扩展了 .shed_rows() 和 .shed_cols() 以处理多维数据集
扩展了 .insert_rows() 和 .insert_cols() 以处理多维数据集
扩展的子多维数据集视图,以允许对切片进行非连续访问
改进了稀疏矩阵元素访问运算符的调优
通过 solve() 更快地处理三对角矩阵
使用 OpenMP 时,具有不同元素类型的矩阵的乘法速度更快

版本8.500:

通过 kron() 和 repmat() 更快地处理稀疏矩阵
稀疏矩阵的更快转置
在稀疏矩阵中更快地访问元素
稀疏矩阵的更快行迭代器
通过 trace() 更快地处理复合表达式
更有效地处理子矩阵视图中的锯齿
扩展 normalise() 以处理稀疏矩阵
扩展了 .transform() 和 .for_each() 来处理稀疏矩阵
添加了 reverse() 以反转元素的顺序
添加了用于复制元素的 repelem()
添加了 roots() 以查找多项式的根

版本8.400:

通过 repmat() 更快地处理稀疏矩阵
更快地加载 CSV 文件
扩展了 kron() 来处理稀疏矩阵
扩展了 index_min() 和 index_max() 以处理多维数据集
扩展 randi()、randu()、randn()、randg() 以输出单个标量
添加了子矩阵和子立方体迭代器
添加了 normcdf()
添加了 mvnrnd()
新增 chi2rnd()
添加了 wishrnd() 和 iwishrnd()

版本8.300:

通过 solve() 更快地处理带矩阵
通过 chol() 更快地处理带矩阵
使用 OpenMP 时更快的 randg()
添加了 normpdf()
扩展了 .save() 以允许将新数据集附加到现有的 HDF5 文件

版本8.200:

添加了 intersect() 用于查找两个向量/矩阵中的公共元素
扩展 affmul() 以处理非平方矩阵

版本8.100:

通过元素访问算子更快地增量构建稀疏矩阵
稀疏矩阵中更快的对角线视图
扩展了 SpMat 以以坐标格式保存/加载稀疏矩阵
扩展了 .save()/.load() 以允许指定 HDF5 文件中的数据集
添加了 affmul() 以简化仿射变换的应用
现在,默认情况下,警告和错误会打印到 std::cerr 流中
添加了 set_cerr_stream() 和 get_cerr_stream() 以替换 set_stream_err1()、set_stream_err2()、get_stream_err1()、get_stream_err2()
新的配置选项ARMA_COUT_STREAM和ARMA_CERR_STREAM

版本7.960:

使用 OpenMP 时更快的 randn()
更快的类gmm_diag,适用于具有对角协方差矩阵的高斯混合模型
添加了 .sum_log_p() 到 gmm_diag 类
添加了gmm_full类,用于具有全协方差矩阵的高斯混合模型
扩展了 .each_slice() 以选择使用 OpenMP 进行多线程执行

版本7.950:

扩展了 accu() 和 sum(),以使用 OpenMP 处理具有计算成本高昂的元素函数的表达式
扩展了 trimatu() 和 trimatl() 以允许指定描绘三角形部分边界的对角线

版本7.900:

扩展的 clamp() 来处理立方体
计算成本高昂的元素函数(如 exp()、log()、cos() 等) 现在可以通过 OpenMP 自动加速; 这需要支持 OpenMP 3.1+ 的 C++11/C++14 编译器
对于 GCC 和 clang 编译器,请使用以下选项来启用 C++11 和 OpenMP:-std=c++11 -fopenmp
注意:使用 GCC 时,结合使用可能会导致最近处理器的速度下降-march=native-fopenmp

版本7.800:

将许可证更改为宽松的 Apache 许可证 2.0; 有关详细信息,请参阅问题页面

版本7.700:

添加了 polyfit() 和 polyval()
添加了第二种形式的 log_det() 以直接将结果作为复数返回
在统计函数中添加了 range()
扩展了 trimatu()/trimatl() 和 symmatu()/symmatl() 来处理稀疏矩阵

版本7.600:

更准确的 eigs_sym() 和 eigs_gen()
扩展 floor()、ceil()、round()、trunc()、sign() 来处理稀疏矩阵
新增 arg()、atan2()、hypot()

版本7.500:

展开 qz() 以选择性地指定 Schur 表单的顺序
扩展 .each_slice() 以支持矩阵乘法

版本7.400:

添加了 expmat_sym(), logmat_sympd(), sqrtmat_sympd()
添加了 .replace()

版本7.300:

添加了 index_min() 和 index_max() 独立函数
扩展 .subvec() 以接受 size() 参数
通过 lu() 对非平方矩阵进行更稳健的处理

版本7.200:

添加了 .index_min() 和 .index_max() 成员函数
扩展了 ind2sub() 来处理索引的向量
扩展了 sub2ind() 来处理下标矩阵
扩展了 expmat()、logmat() 和 sqrtmat() 以选择性地返回指示成功的布尔值
通过 vectorise() 更快地处理复合表达式

版本7.100:

添加了 erf()、erfc()、lgamma()
添加了 .head_slices() 和 .tail_slices() 到子多维数据集视图
spsolve() 现在需要 SuperLU 5.2
eigs_sym()、eigs_gen() 和 svds() 现在对实数(非复杂)矩阵使用内置的 ARPACK 重新实现;供 稿 人:Yixuan Qiu

版本6.700:

添加了用于数值积分的 trapz()
添加了用于计算矩阵对数的 logmat()
添加了 regspace() 用于生成具有规则间隔元素的向量
添加了 logspace(),用于生成具有对数间隔元素的向量
添加了用于确定近似相等的 approx_equal()

版本6.600:

扩展 sum()、mean()、min()、max() 来处理立方体
扩展了 Cube 类以处理任意大小的空立方体(例如 0x5x2)
添加了 shift() 用于元素的圆周移位
添加了 sqrtmat() 用于查找矩阵的平方根

版本6.500:

添加了用于 2D 卷积的 conv2()
添加了用于对数据进行聚类的独立 kmeans() 函数
添加了 trunc()
扩展 conv() 以选择性地提供中心卷积
使用英特尔 MKL、ATLAS 或 OpenBLAS 时,通过 accu() 更快地处理乘法和累加

版本6.400:

扩展了 each_col()、each_row() 和 each_slice() 以处理 C++11 Lambda 函数
添加了 ind2sub() 和 sub2ind()

版本 6.300:

扩展 solve() 以查找秩缺陷系统的近似解
更快地处理复合表达式中的非连续子矩阵视图
添加了 .for_each() 到 Mat、Row、Col、Cube 和 field 类
添加了 rcond() 用于估计倒数条件数

版本6.200:

扩展 diagmat() 以处理非正方形矩阵和任意对角线
扩展的 trace() 来处理非平方矩阵

版本6.100:

使用英特尔 MKL、ATLAS 或 OpenBLAS 时更快的 norm() 和 normalise()
添加了 Schur 分解:schur()
通过 hist() 和 histc() 更严格地处理矩阵对象
用于使用 Mat、Col、Row 和 Cube 辅助内存的高级构造函数现在具有默认值 strict = false
Cube 类现在延迟 .slice() 相关结构的分配,直到需要
扩展的 join_slices() 以处理使用矩阵连接多维数据集

版本5.600:

添加了 .each_slice() 用于应用于立方体的每个切片的矩阵操作
扩展了 .each_col() 和 .each_row() 以处理异地操作

版本5.500:

扩展的对象构造函数和生成器,用于处理基于 size() 的维度规范

版本5.400:

添加了 find_unique() 用于查找唯一值的索引
添加了 diff() 用于计算连续元素之间的差异
添加了 cumprod() 用于计算累积乘积
添加了 null() 用于查找空空间的正交基
扩展了 interp1() 以处理重复位置
扩展 unique() 来处理复数
更快的 flipud()
更快的行向 cumsum()

版本5.300:

添加了广义 Schur 分解:qz()
添加了 .has_inf() 和 .has_nan()
扩展了 interp1() 以处理域外位置
使用 .set_imag() 和 .set_real() 扩展的稀疏矩阵类
扩展了 imag()、real() 和 conj() 来处理稀疏矩阵
扩展了 diagmat()、reshape() 和 resize() 来处理稀疏矩阵
更快的稀疏 sum()
更快的行向 sum()、mean()、min()、max()
将物理常量更新为 NIST 2014 CODATA 值

版本5.200:

添加了 orth() 用于查找矩阵范围空间的正交基
用于处理嵌套初始化器列表的扩展元素初始化 (C++11)

版本5.100:

添加了用于一维插值的 interp1()
添加了 .is_sorted() 用于检查向量或矩阵是否具有排序元素
将物理常量更新为 NIST 2010 CODATA 值

版本5.000:

添加了 spsolve() 用于求解稀疏线性方程组
添加了 svds() 用于稀疏矩阵的奇异值分解
添加了 nonzeros() 用于从矩阵中提取非零值
添加了对稀疏矩阵对对角线视图的处理
扩展 repmat() 来处理稀疏矩阵
扩展了 join_rows() 和 join_cols() 以处理稀疏矩阵
sort_index() 和 stable_sort_index() 已放在延迟操作框架中,以提高效率
使用 C++11 编译器时,会自动启用 64 位整数

版本4.650:

添加了 randg() 用于从 gamma 分布生成随机值(仅限 C++11)
将 .head_rows() 和 .tail_rows() 添加到子矩阵视图
添加了 .head_cols() 和 .tail_cols() 到子矩阵视图
扩展 eigs_sym() 以选择性地计算具有最小/最大代数值的特征值

版本4.600:

添加了 .head() 和 .tail() 到子矩阵视图
复合表达式中更快的矩阵转置
更快的就地矩阵乘法
使用 -O3 -ffast-math -march=native(gcc 和 clang)编译时更快的 accu() 和 norm()

版本4.550:

新增矩阵指数函数:expmat()
在启用 OpenMP 的情况下进行编译时,gmm_diag类中的 .log_p() 和 .avg_log_p() 函数更快
更快地处理使用外部积的表达式的就地加法/减法

版本 4.500:

通过 norm() 更快地处理复杂向量
展开 chol() 以选择性地将输出矩阵指定为上三角形或下三角形
将矩阵保存为文本文件时,可以更好地处理非有限值

版本4.450:

更快地处理复合表达式中的基质转置
扩展了 symmatu()/symmatl() 以选择性地禁用元素的复共轭
扩展 sort_index() 以处理复杂向量
使用生成随机样本的函数扩展了gmm_diag类

版本4.400:

通过 dot() 更快地处理子向量
通过子矩阵视图更快地处理混叠
添加了 clamp() 以使钳位值介于下限和上限之间
添加了gmm_diag类,用于使用高斯混合模型对数据进行统计建模
扩展了稀疏矩阵的批量插入构造函数,以在重复位置添加值

版本4.320:

扩展了 eigs_sym() 和 eigs_gen() 以使用可选的公差参数
扩展 eig_sym() 以在分而治之失败时自动回退到标准分解方法
基于 cmake 的安装程序允许在 C++ 模式下使用 gcc 4.8.3+ 时使用 C++ 11 随机数生成器

版本4.300:

添加了 find_finite() 和 find_nonfinite()
表达式 X=inv(A)*B*C 和 X=A.i()*B*C 会自动转换为 X=solve(A,B*C)

版本4.200:

稀疏矩阵的更快转置
更有效地处理矩阵乘法过程中的混叠
标记为对角线的矩阵的较快反转

版本4.100:

添加了 normalise() 用于将向量归一化为单位 p 范数
扩展了字段类以处理 3D 布局
扩展 eigs_sym() 和 eigs_gen() 以获得各种形式的特征值(例如最大或最小量级)
使用 Clang 3.4+ 和 -O3 优化时,基本表达式(例如矩阵加法)的自动 SIMD 矢量化
更快地处理稀疏子矩阵视图

版本4.000:

添加了稀疏矩阵的特征分解:eigs_sym() 和 eigs_gen()
添加了矩阵对的特征分解:eig_pair()
添加了更简单的 eig_gen() 形式
添加了矩阵的条件数:cond()
扩展 find() 来处理多维数据集
展开的子多维数据集视图以访问矢量中指定的元素
running_stat_vec的模板参数已扩展为接受向量类型
更稳健的 4x4 矩阵快速反演
现在默认对 eig_sym()、pinv()、princomp()、rank()、svd()、svd_econ() 使用更快的分而治之分解
形式 inv(sympd(X)) 不再假设 X 是正定的;请改用 inv_sympd()

版本3.930:

添加了基于 size() 的子矩阵视图大小规范
添加了 min() 和 max() 的元素变体
添加了 svd_econ() 的分而治之变体
添加了 pinv() 的分而治之变体
添加了 randi() 以生成具有随机整数值的矩阵
添加了 inplace_trans() 以实现内存高效的就地转置
在 sort() 和 sort_index() 中添加了更直观的排序方向规范
在 det()、.i()、inv() 和 solve() 中添加了更直观的方法规范
使用 C++11 时为 wall_clock 类提供更精确的计时器

版本3.920:

更快的 .zeros()
使用 C++11 时更快的 round()、exp2() 和 log2()
添加了 signum 函数:sign()
添加了使用 C++ 时的移动构造函数 11
添加了 2D 快速傅里叶变换:fft2()
添加了 .tube(),以便更轻松地从立方体中提取向量和子立方体
在构造 Mat、Col、Row 和 Cube 类期间添加了填充类型的规范, 例如。垫 X(4, 5, 填充::零)

版本3.910:

矩阵与自身的转置的更快乘法,即。X*X.t() 和 X.t()*X
添加了 vectorise() 用于将矩阵重塑为向量
添加了 all() 和 any(),用于指示存在满足关系条件的元素

版本3.900:

在使用 GCC 4.7+ 和 -O3 优化时,添加了基本表达式的自动 SSE2 向量化(例如矩阵加法)
更快的中位数()
通过子矩阵行的转置更快地处理复合表达式
通过复杂向量的转置更快地处理复合表达式
添加了对以 HDF5 格式保存和加载立方体的支持

版本3.820:

复合表达式更快的 as_scalar()
小向量的快速转置
适用于小向量的更快矩阵向量乘积
小固定大小矩阵的乘法速度更快

版本3.810:

添加了快速傅里叶变换:fft()
添加了通过子矩阵和子立方体对 .imbue() 和 .transform() 的处理
添加了稀疏矩阵的批处理插入构造函数

版本3.800:

添加了 .imbue(),用于使用函子或 lambda 表达式提供的值填充矩阵/立方体
添加了 .swap() 用于与另一个矩阵交换内容
添加了 .transform(),用于使用函子或 lambda 表达式转换矩阵/立方体
添加了 round() 以将矩阵元素舍入到最接近的整数
更快的 find()
将许可证更改为 Mozilla 公共许可证 2.0

版本3.6:

使用子矩阵和子立方体更快地处理复合表达式
更快的 trace()
添加了对将矩阵加载为具有 NaN 和 Inf 元素的文本文件的支持
添加了 stable_sort_index(),它保留了具有等效值的元素的相对顺序
添加了对稀疏矩阵的处理 mean(), var(), norm(), abs(), square(), sqrt()
添加了arma_binary格式的稀疏矩阵的保存和加载

版本3.4:

添加了经济的QR分解:qr_econ()
添加了 .each_col() 和 .each_row() 用于应用于矩阵每列或每行的向量运算
添加了对稀疏矩阵的初步支持
添加了以 HDF5 格式保存和加载矩阵的功能
通过可选使用分而治之算法更快地分解奇异值
更快的 .randn()
复数的 dot() 和 cdot() 速度更快

版本3.2:

添加了 unique(),用于查找矩阵的唯一元素
添加了 .eval(),用于强制计算延迟表达式
通过可选使用分而治之算法更快地分解特征
更快地转置向量和复合表达式
更快地处理对角线视图
更快地处理微小的固定大小向量(≤ 4 个元素)

版本3.0:

添加了反转的简写:.i()
添加了基准类
添加了 hist() 和 histc()
添加了非连续子矩阵视图
使用单行或单列更快地处理子矩阵视图
在固定大小的矩阵中更快地访问元素
更快的 repmat()
表达式 X=inv(A)*B 和 X=A.i()*B 会自动转换为 X=solve(A,B)
通过 sum()、cumsum()、prod()、min()、max()、mean()、median()、stddev()、var() 更好地检测向量表达式
更快地生成随机数 (例如。randu() 和 randn()), 通过产生与 2.x 中略有不同的数字的算法
删除了将可写辅助(外部)存储器绑定到固定大小矩阵的支持; 相反,您可以使用具有可写辅助存储器的标准矩阵, 或通过复制内存来初始化固定大小的矩阵; 将辅助存储器与标准矩阵一起使用不受影响
删除了 .print_trans() 和 .raw_print_trans(); 相反,您可以链接 .t() 和 .print() 以获得类似的结果:X.t().print()

版本2.4:

添加了较短的转置形式:.t() 和 .st()
添加了 .resize() 和 resize()
添加了可选的 64 位索引(允许矩阵具有超过 40 亿个元素),通过 include/armadillo_bits/config.hpp 中的ARMA_64BIT_WORD启用
添加了对 C++11 初始化程序列表的实验性支持,通过 include/armadillo_bits/config.hpp 中的ARMA_USE_CXX11启用
重构代码以消除使用 Clang C++ 编译器时的警告
umat、uvec、.min() 和 .max() 已更改为使用 uword 类型而不是 u32 类型; 默认情况下,uword 和 u32 类型是等效的(即最小宽度为 32 位的无符号整数类型); 但是,当通过 include/armadillo_bits/config.hpp 中的ARMA_64BIT_WORD启用 64 位索引时, 然后,uword 类型的最小宽度为 64 位

版本2.2:

新增svd_econ()
新增circ_toeplitz()
添加了 .is_colvec() 和 .is_rowvec()

版本2.0:

det()、inv() 和 solve() 可以强制对微小矩阵使用更精确的算法(≤ 4x4)
添加了 syl(),用于求解西尔维斯特方程
添加了 strans(),用于在不采用复数共轭的情况下转置复矩阵
添加了 symmatu() 和 symmatl()
添加了子矩阵的子矩阵
对称正定矩阵的更快反转
对固定尺寸矩阵的元素访问速度更快
微小矩阵的乘法速度更快(例如 4x4)
包含子矩阵的更快复合表达式
增加了对任意大小的空矩阵的处理(例如 5x0)
在 running_stat 和 running_stat_vec 中添加了 .count() 成员函数
添加了将矩阵加载和保存为CSV文本文件
trans() 现在在转置复矩阵时采用复数共轭
不返回指示成功的布尔值的 chol()、eig_sym()、eig_gen()、inv()、lu()、pinv()、princomp()、qr()、solve()、svd()、syl() 的形式现在在检测到失败时会抛出 std::runtime_error 异常
princomp_cov() 已被删除;eig_sym() 可以与 cov() 结合使用
.is_vec() 现在对空向量输出 true(例如 0x1)
set_log_stream() 和 get_log_stream() 已被 set_stream_err1() 和 get_stream_err1() 取代

版本1.2:

添加了 Mat 和 Cube 的 .min() 和 .max() 成员函数
添加了 floor() 和 ceil()
添加了“Not a Number”的表示形式:math::nan()
添加了无穷大的表示形式:math::inf()
.in_range() 扩展为使用 span() 参数
固定大小的矩阵和向量可以使用辅助(外部)存储器
子矩阵和子字段可以通过 X( span(a,b), span(c,d) ) 访问
子立方体可以通过 X( span(a,b), span(c,d), span(e,f) ) 访问
span 的两个参数版本可以替换为 span::all 或 span(),以指示整个范围
对于多维数据集,span 的两个参数版本可以替换为 单个参数版本 span(a),用于指示单个列、行或切片
任意的“平面”子立方体可以解释为矩阵;例如:
cube Q = randu<cube>(5,3,4);
mat  A = Q( span(1), span(1,2), span::all );
// A has a size of 2x4

vec v = ones<vec>(4);
Q( span(1), span(1), span::all ) = v;
通过 trimatu() / trimatl() 添加了对矩阵的三角形解释
添加了 solve() 和 inv() 对三角矩阵的显式处理
子矩阵的扩展语法,包括访问其索引在向量中指定的元素
添加了更改用于记录错误和警告的流的功能
添加了以原始二进制格式保存/加载矩阵的功能
添加了累积求和函数:cumsum()

在 1.0 中更改(与早期的 0.x 开发版本相比):

lu() 的 3 个参数版本, 例如。卢(L,U,X), 提供 L 和 U,它们应该与 Octave 3.2 产生的相同 (在 0.9.90 之前的版本中并非如此)	
rand() 已被 randu() 取代; 这样做是为了避免与 std::rand() 混淆, 它以不同的间隔生成随机数
在 0.9.0 之前的版本中,一些乘法运算直接将大小为 1x1 的结果矩阵转换为标量。 现在情况已不再如此。 如果您知道表达式的结果将是一个 1x1 矩阵,并希望将其视为纯标量, 使用 as_scalar() 包装函数
几乎所有功能都已放置在延迟操作框架中(出于速度目的)。 这可能会影响假定某些函数的输出是纯矩阵的代码。 解决方案很简单,如下所述。	
通常,犰狳在执行操作之前会对操作进行排队。 因此,不能假定操作或函数的直接输出是可直接访问的矩阵。 当输出需要存储在矩阵中时,将执行排队操作, 例如。mat B = 反式 (A) 或 mat B(反式 (A))。 如果需要强制执行延迟的操作, 将操作或函数放在相应的 Mat 构造函数中。 例如,如果您的代码假定某些函数的输出是纯矩阵, 例如。chol(m).diag(),将代码更改为 mat(chol(m)).diag()。 同样,如果您需要将 A+B 等操作的结果传递给自己的函数之一, 使用 my_function( mat(A+B) )。
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值