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

API 添加和更改的历史记录

文章目录

  • API 稳定性和版本政策:
  • 每个版本的添加和更改列表:
    • 版本12.8:
    • 版本12.6:
    • 版本12.4:
    • 版本12.2:
    • 版本12.0:
    • 版本11.4:
    • 版本11.2:
    • 版本11.0:
    • 版本10.8:
    • 版本10.7:
    • 版本10.6:
    • 版本10.5:
    • 版本10.4:
    • 版本10.3:
    • 版本10.2:
    • 版本10.1:
    • 版本9.900:
    • 版本9.800:
    • 版本9.700:
    • 版本 9.600:
    • 版本9.500:
    • 版本9.400:
    • 版本 9.300:
    • 版本 9.200:
    • 版本 9.100:
    • 版本 8.600:
    • 版本8.500:
    • 版本8.400:
    • 版本8.300:
    • 版本8.200:
    • 版本8.100:
    • 版本7.960:
    • 版本7.950:
    • 版本7.900:
    • 版本7.800:
    • 版本7.700:
    • 版本7.600:
    • 版本7.500:
    • 版本7.400:
    • 版本7.300:
    • 版本7.200:
    • 版本7.100:
    • 版本6.700:
    • 版本6.600:
    • 版本6.500:
    • 版本6.400:
    • 版本 6.300:
    • 版本6.200:
    • 版本6.100:
    • 版本5.600:
    • 版本5.500:
    • 版本5.400:
    • 版本5.300:
    • 版本5.200:
    • 版本5.100:
    • 版本5.000:
    • 版本4.650:
    • 版本4.600:
    • 版本4.550:
    • 版本 4.500:
    • 版本4.450:
    • 版本4.400:
    • 版本4.320:
    • 版本4.300:
    • 版本4.200:
    • 版本4.100:
    • 版本4.000:
    • 版本3.930:
    • 版本3.920:
    • 版本3.910:
    • 版本3.900:
    • 版本3.820:
    • 版本3.810:
    • 版本3.800:
    • 版本3.6:
    • 版本3.4:
    • 版本3.2:
    • 版本3.0:
    • 版本2.4:
    • 版本2.2:
    • 版本2.0:
    • 版本1.2:
    • 在 1.0 中更改(与早期的 0.x 开发版本相比):

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 2x4vec 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) )。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存货计价方式 比较-移动平均和批次计价

SAP常用的存货计价方式有 标准价格移动平均价格批次计价 标准价格常用于制造企业&#xff0c;今天的方案比较主要集中在销售型企业常用的移动平均价和批次计价 批次计价&#xff1a; 移动平均&#xff1a; 两种计价方式的Pros&Cons 比较 批次计价 移动平均优点 1…

超好用的一键生成原创文案方法

在现代社会中&#xff0c;原创文案不管是在营销中&#xff0c;还是在品牌推广中都起着至关重要的作用。然而&#xff0c;对于许多人来说&#xff0c;创作出令人印象深刻且引人注目的原创文案并不容易。但随着技术的发展&#xff0c;我们现在可以利用一键生成原创文案的方法来帮…

黑马java-JavaSE进阶-java高级技术

1.单元测试 就是针对最小的功能单元方法&#xff0c;编写测试代码对其进行正确性测试 2.Junit单元测试框架 可以用来对方法进行测试&#xff0c;它是第三方公司开源出来的 优点&#xff1a; 可以灵活的编写测试代码&#xff0c;可以针对某个方法执行测试&#xff0c;也支持一键…

基于springboot的水果购物商城管理系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

Pinctrl子系统_04_Pinctrl子系统主要数据结构

引言 本节说明Pinctrl子系统中主要的数据结构&#xff0c;对这些数据结构有所了解&#xff0c;也就是对Pinctrl子系统有所了解了。 前面说过&#xff0c;要使用Pinctrl子系统&#xff0c;就需要去配置设备树。 以内核面向对象的思想&#xff0c;设备树可以分为两部分&#x…

rabbitmq3

指定通过通道将消息发送给哪个消息队列 同一个通道可以向不同的队列发送消息的&#xff0c;如果你绑定的队列和发布消息的队列不一致也是可以的&#xff0c;这个才是真正的发布消息去具体的某一个队列&#xff1a; 如果队列没有持久化&#xff0c;就不会把这个消息队列保存在磁…

stm32学习记录-5.2PWM输出控制sg90舵机角度

源码连接&#xff1a;https://gitee.com/HL12334/stm32-learning-code 前提知识&#xff1a; 1.定时器中断 1.关键概念 1.1pwm输出 1.常用术语 OC&#xff08;output compare&#xff09;输出比较CNT&#xff08;counter&#xff09;&#xff0c;定时器中用于计数的寄存器…

时序报告Report_timing_summary之一步精通配置选项使用

目录 一、前言 二、配置选项概览图 三、配置选项 3.1 Options 3.1.1 report 3.1.2 path limits 3.1.3 path display 3.2 Advanced 3.2.1 report 3.2.3 miscellaneous 3.3 Timer Settings 3.4 共有部分 四、工程示例 4.1 工程设计代码 4.2 约束文件 4.3 Option…

Nginx常用命令总结及常见问题排查

连续更新挑战第4天… 目录 常用启停命令Nginx 常见问题Nginx 如何忽略非标准http头检测?Nginx websocket代理Nginx 临时缓存不够导致下载文件失败Nginx 没有临时缓存目录权限导致下载文件失败Nginx非root用户启动无法使用80端口或者报无权限异常路由重写怎么配置?nginx 根据…

Linux系统架构----nginx的访问控制

nginx的访问控制 一、nginx基于授权的访问控制概述 Nginx与Apache一样&#xff0c;可以实现基于用户权限的访问控制&#xff0c;当客户端想要访问相应的网站或者目录时&#xff0c;要求用户输入用户名和密码&#xff0c;才能正常访问配置步骤生成用户密码认证文件 &#xff1…

qt带后缀单位的QLineEdit

QLineEditUnit.h #pragma once #include <QLineEdit> #include <QPushButton>class QLineEditUnit : public QLineEdit {Q_OBJECT public:QLineEditUnit(QWidget* parent Q_NULLPTR);~QLineEditUnit();//获取编辑框单位QString UnitText()const;//设置编辑框单位…

STM32的启动流程分析 和 一些底层控制的原理

阅读引言&#xff1a; 阅读本文之后&#xff0c; 你将对单片机&#xff0c; 甚至是嵌入式系统&#xff0c; 或者是传统的PC机系统的启动流程有一个大致的了解&#xff0c; 本文更加偏向于单片机的启动流程分析。 目录 一、基础知识 1.STM32系列的微控制器&#xff08;mcu&…

Flink入门之DataStream实现word count

以下是一个从无界数据源读取数据计算word count的示例 pom配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

自研cloud框架专题–web模块(三)

项目特点一:框架集成 1.引入核心依赖2.配置相关功能 二:功能介绍 1.swagger支持并提供swagger快速配置2.knife增强swagger支持3.全局请求参数校验(Validation)支持4.字段脱敏支持5.默认jackson序列化6.xss,cors支持7.访问日志支持8.全局异常处理,统一返回结果9.系统关键及常用信…

数据结构之deque双端队列

一、概念&#xff1a; 众所周知&#xff0c;数据结构是用来存储数据&#xff0c;deque也不例外&#xff0c;他是集结了队列和栈的性质而成的结构&#xff0c;他几乎拥有所有数据结构能有的操作&#xff0c;看似已经大杀四方&#xff0c;可实际情况如何呢&#xff0c;那就带者这…

判断矩阵是否是魔方矩阵

给定程序中&#xff0c;函数fun的功能是&#xff1a;判定形参a所指的NxN&#xff08;规定N为奇数&#xff09;的矩阵是否是"魔方"&#xff0c;若是&#xff0c;函数返回值为1&#xff1b;不是&#xff0c;函数返回值为0。“幻方"的判定条件是&#xff1a;矩阵每…

解决npm install 时出现的.git can‘t be found (see https://git.io/Jc3F9)问题

解决npm install 时出现的.git can‘t be found (see https://git.io/Jc3F9)问题 问题: 今天使用webstream npm instatll之后报错 .git can‘t be found (see https://git.io/Jc3F9) 原因 一般来说就是你使用ws打开的文件夹位置中不是.git文件夹的所在的文件夹相同的位置 举个…

Day 8.TCP包头和HTTP

TCP包头 1.序号&#xff1a;发送端发送数据包的编号 2.确认号&#xff1a;已经确认接收到的数据的编号&#xff08;只有当ACK为1时、确认号才有用&#xff09;&#xff1b; TCP为什么安全可靠 1.在通信前建立三次握手 SYP SYPACK ACK 2.在通信过程中通过序列号和确认号和…

前端javascript的DOM对象操作技巧,全场景解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属的专栏&#xff1a;前端泛海 景天的主页&#xff1a;景天科技苑 文章目录 1.js的DOM介绍2.节点元素层级关系3.通过js修改&#xff0c;清空节点…

【棘手问题】Spring JPA一级缓存导致获取不到数据库表中的最新数据,对象地址不发生改变

【棘手问题】Spring JPA一级缓存导致获取不到数据库表中的最新数据&#xff0c;对象地址不发生改变 一、问题背景二、解决步骤2.1 debug2.2 原因分析2.2.1 数据步骤2.2.2 大模型解释2.2.3 解释举例2.2.4 关键函数 2.3 解决方案 三、Spring JPA一级缓存 一、问题背景 项目的数据…