Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8687f1d641 | ||
|
|
45bc3e2781 | ||
|
|
eae8dea3dd | ||
|
|
5c82dd9538 | ||
|
|
f5bf32c5ae | ||
|
|
be109e1f87 | ||
|
|
22d27cb9dc | ||
|
|
b04ed326c4 | ||
|
|
aff2df8a3a | ||
|
|
4decbcb0dc | ||
|
|
205c553314 | ||
|
|
80883afcbb | ||
|
|
5dca4d081d | ||
|
|
31571783c6 |
@@ -0,0 +1,10 @@
|
||||
<html>
|
||||
<body>
|
||||
<br>
|
||||
The list of changes is part of the documentation:
|
||||
<ul>
|
||||
<li><a href="http://arma.sourceforge.net/docs.html#changelog">docs.html#changelog</a> (online copy)</li>
|
||||
<li><a href="docs.html#changelog">docs.html#changelog</a> (local copy)</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
@@ -83,8 +83,8 @@ Citations are useful for the continued development and maintenance of the librar
|
||||
Journal of Open Source Software, Vol. 1, pp. 26, 2016.
|
||||
|
||||
* Conrad Sanderson and Ryan Curtin.
|
||||
An Adaptive Solver for Systems of Linear Equations.
|
||||
International Conference on Signal Processing and Communication Systems, pp. 1-6, 2020.
|
||||
A User-Friendly Hybrid Sparse Matrix Class in C++.
|
||||
Lecture Notes in Computer Science (LNCS), Vol. 10931, pp. 422-430, 2018.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ If you discover any bugs or regressions, please <a href="http://arma.sourceforge
|
||||
</li>
|
||||
<br>
|
||||
<li>
|
||||
History of <a href="#api_additions">API additions</a>
|
||||
History of <a href="#changelog">API additions</a>
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
@@ -202,13 +202,8 @@ Conrad Sanderson and Ryan Curtin.
|
||||
<br>
|
||||
<br>
|
||||
Conrad Sanderson and Ryan Curtin.
|
||||
<br><i><a href="armadillo_solver_2020.pdf">An Adaptive Solver for Systems of Linear Equations</a></i>.
|
||||
<br>International Conference on Signal Processing and Communication Systems, pp. 1-6, 2020.
|
||||
<!--
|
||||
Conrad Sanderson and Ryan Curtin.
|
||||
<br><i><a href="armadillo_lncs_2018.pdf">A User-Friendly Hybrid Sparse Matrix Class in C++</a></i>.
|
||||
<br>Lecture Notes in Computer Science (LNCS), Vol. 10931, pp. 422-430, 2018.
|
||||
-->
|
||||
</li>
|
||||
</ul>
|
||||
</td>
|
||||
@@ -552,7 +547,7 @@ Conrad Sanderson and Ryan Curtin.
|
||||
<tr><td><a href="#syntax">Matlab/Armadillo syntax differences</a></td><td> </td><td>examples of Matlab syntax and conceptually corresponding Armadillo syntax</td></tr>
|
||||
<tr style="background-color: #F5F5F5;"><td><a href="#example_prog">example program</a></td><td> </td><td>short example program</td></tr>
|
||||
<tr style="background-color: #F5F5F5;"><td><a href="#config_hpp">config.hpp</a></td><td> </td><td>configuration options</td></tr>
|
||||
<tr style="background-color: #F5F5F5;"><td><a href="#api_additions">API additions</a></td><td> </td><td>API stability and list of API additions</td></tr>
|
||||
<tr style="background-color: #F5F5F5;"><td><a href="#changelog">API additions</a></td><td> </td><td>API stability and list of API additions</td></tr>
|
||||
<!--<tr><td><a href="#log_add">log_add</a></td><td> </td><td>TODO</td></tr>-->
|
||||
<!--<tr><td><a href="#catching_exceptions">catching exceptions</a></td><td> </td><td>TODO</td></tr>-->
|
||||
</tbody>
|
||||
@@ -10042,7 +10037,7 @@ double result2 = log_det_sympd(B); // form 2
|
||||
See also:
|
||||
<ul>
|
||||
<li><a href="#log_det">log_det()</a></li>
|
||||
<li><a href="det">det()</a></li>
|
||||
<li><a href="#det">det()</a></li>
|
||||
<li><a href="#rcond">rcond()</a></li>
|
||||
<li><a href="http://mathworld.wolfram.com/Determinant.html">determinant in MathWorld</a></li>
|
||||
<li><a href="http://en.wikipedia.org/wiki/Determinant">determinant in Wikipedia</a></li>
|
||||
@@ -19272,7 +19267,7 @@ See also:
|
||||
|
||||
<div class="pagebreak"></div><div class="noprint"><hr class="greyline"><br></div>
|
||||
<a name="api_additions"></a>
|
||||
<a name="api_changes"></a>
|
||||
<a name="changelog"></a>
|
||||
<b>History of API Additions, Changes and Deprecations</b>
|
||||
<br>
|
||||
<ul>
|
||||
|
||||
@@ -88,7 +88,7 @@ class Col : public Mat<eT>
|
||||
inline Col(const subview_cube<eT>& X);
|
||||
inline Col& operator=(const subview_cube<eT>& X);
|
||||
|
||||
arma_cold inline mat_injector<Col> operator<<(const eT val);
|
||||
arma_deprecated inline mat_injector<Col> operator<<(const eT val);
|
||||
|
||||
arma_inline arma_warn_unused const Op<Col<eT>,op_htrans> t() const;
|
||||
arma_inline arma_warn_unused const Op<Col<eT>,op_htrans> ht() const;
|
||||
|
||||
@@ -625,7 +625,7 @@ Col<eT>::operator=(const subview_cube<eT>& X)
|
||||
|
||||
template<typename eT>
|
||||
inline
|
||||
arma_cold
|
||||
arma_deprecated
|
||||
mat_injector< Col<eT> >
|
||||
Col<eT>::operator<<(const eT val)
|
||||
{
|
||||
|
||||
@@ -1154,6 +1154,8 @@ Cube<eT>::slice(const uword in_slice)
|
||||
|
||||
arma_debug_check_bounds( (in_slice >= n_slices), "Cube::slice(): index out of bounds" );
|
||||
|
||||
// BUG: data race when accessed from multiple threads; causes memory leakage
|
||||
|
||||
if(mat_ptrs[in_slice] == nullptr)
|
||||
{
|
||||
const eT* ptr = (n_elem_slice > 0) ? slice_memptr(in_slice) : nullptr;
|
||||
@@ -1176,6 +1178,8 @@ Cube<eT>::slice(const uword in_slice) const
|
||||
|
||||
arma_debug_check_bounds( (in_slice >= n_slices), "Cube::slice(): index out of bounds" );
|
||||
|
||||
// BUG: data race when accessed from multiple threads; causes memory leakage
|
||||
|
||||
if(mat_ptrs[in_slice] == nullptr)
|
||||
{
|
||||
const eT* ptr = (n_elem_slice > 0) ? slice_memptr(in_slice) : nullptr;
|
||||
|
||||
@@ -188,8 +188,8 @@ class Mat : public Base< eT, Mat<eT> >
|
||||
inline Mat& operator/=(const spdiagview<eT>& X);
|
||||
|
||||
|
||||
arma_cold inline mat_injector<Mat> operator<<(const eT val);
|
||||
arma_cold inline mat_injector<Mat> operator<<(const injector_end_of_row<>& x);
|
||||
arma_deprecated inline mat_injector<Mat> operator<<(const eT val);
|
||||
arma_deprecated inline mat_injector<Mat> operator<<(const injector_end_of_row<>& x);
|
||||
|
||||
|
||||
arma_inline subview_row<eT> row(const uword row_num);
|
||||
|
||||
@@ -2973,7 +2973,7 @@ Mat<eT>::operator/=(const spdiagview<eT>& X)
|
||||
|
||||
|
||||
template<typename eT>
|
||||
arma_cold
|
||||
arma_deprecated
|
||||
inline
|
||||
mat_injector< Mat<eT> >
|
||||
Mat<eT>::operator<<(const eT val)
|
||||
@@ -2984,7 +2984,7 @@ Mat<eT>::operator<<(const eT val)
|
||||
|
||||
|
||||
template<typename eT>
|
||||
arma_cold
|
||||
arma_deprecated
|
||||
inline
|
||||
mat_injector< Mat<eT> >
|
||||
Mat<eT>::operator<<(const injector_end_of_row<>& x)
|
||||
|
||||
@@ -88,7 +88,7 @@ class Row : public Mat<eT>
|
||||
inline Row(const subview_cube<eT>& X);
|
||||
inline Row& operator=(const subview_cube<eT>& X);
|
||||
|
||||
arma_cold inline mat_injector<Row> operator<<(const eT val);
|
||||
arma_deprecated inline mat_injector<Row> operator<<(const eT val);
|
||||
|
||||
arma_inline arma_warn_unused const Op<Row<eT>,op_htrans> t() const;
|
||||
arma_inline arma_warn_unused const Op<Row<eT>,op_htrans> ht() const;
|
||||
|
||||
@@ -625,7 +625,7 @@ Row<eT>::operator=(const subview_cube<eT>& X)
|
||||
|
||||
template<typename eT>
|
||||
inline
|
||||
arma_cold
|
||||
arma_deprecated
|
||||
mat_injector< Row<eT> >
|
||||
Row<eT>::operator<<(const eT val)
|
||||
{
|
||||
|
||||
@@ -61,8 +61,8 @@ auxlib::inv(Mat<eT>& A)
|
||||
|
||||
if(n > 16)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::getri()");
|
||||
lapack::getri(&n, A.memptr(), &lda, ipiv.memptr(), &work_query[0], &lwork_query, &info);
|
||||
@@ -2323,8 +2323,8 @@ auxlib::eig_sym_dc(Col<eT>& eigval, Mat<eT>& eigvec, const Mat<eT>& X)
|
||||
|
||||
if(N >= 32)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int iwork_query[2];
|
||||
eT work_query[2] = {};
|
||||
blas_int iwork_query[2] = {};
|
||||
|
||||
blas_int lwork_query = -1;
|
||||
blas_int liwork_query = -1;
|
||||
@@ -2404,9 +2404,9 @@ auxlib::eig_sym_dc(Col<T>& eigval, Mat< std::complex<T> >& eigvec, const Mat< st
|
||||
|
||||
if(N >= 32)
|
||||
{
|
||||
eT work_query[2];
|
||||
T rwork_query[2];
|
||||
blas_int iwork_query[2];
|
||||
eT work_query[2] = {};
|
||||
T rwork_query[2] = {};
|
||||
blas_int iwork_query[2] = {};
|
||||
|
||||
blas_int lwork_query = -1;
|
||||
blas_int lrwork_query = -1;
|
||||
@@ -2767,8 +2767,8 @@ auxlib::qr(Mat<eT>& Q, Mat<eT>& R, const Base<eT,T1>& X)
|
||||
|
||||
podarray<eT> tau( static_cast<uword>(k) );
|
||||
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::geqrf()");
|
||||
lapack::geqrf(&m, &n, R.memptr(), &m, tau.memptr(), &work_query[0], &lwork_query, &info);
|
||||
@@ -2875,8 +2875,8 @@ auxlib::qr_econ(Mat<eT>& Q, Mat<eT>& R, const Base<eT,T1>& X)
|
||||
|
||||
podarray<eT> tau( static_cast<uword>(k) );
|
||||
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::geqrf()");
|
||||
lapack::geqrf(&m, &n, Q.memptr(), &m, tau.memptr(), &work_query[0], &lwork_query, &info);
|
||||
@@ -2971,8 +2971,8 @@ auxlib::qr_pivot(Mat<eT>& Q, Mat<eT>& R, Mat<uword>& P, const Base<eT,T1>& X)
|
||||
|
||||
jpvt.zeros();
|
||||
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::geqp3()");
|
||||
lapack::geqp3(&m, &n, R.memptr(), &m, jpvt.memptr(), tau.memptr(), &work_query[0], &lwork_query, &info);
|
||||
@@ -3065,8 +3065,8 @@ auxlib::qr_pivot(Mat< std::complex<T> >& Q, Mat< std::complex<T> >& R, Mat<uword
|
||||
|
||||
jpvt.zeros();
|
||||
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::geqp3()");
|
||||
lapack::cx_geqp3(&m, &n, R.memptr(), &m, jpvt.memptr(), tau.memptr(), &work_query[0], &lwork_query, rwork.memptr(), &info);
|
||||
@@ -3152,8 +3152,8 @@ auxlib::svd(Col<eT>& S, Mat<eT>& A)
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::gesvd()");
|
||||
lapack::gesvd<eT>(&jobu, &jobvt, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, &info);
|
||||
@@ -3222,8 +3222,8 @@ auxlib::svd(Col<T>& S, Mat< std::complex<T> >& A)
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gesvd()");
|
||||
lapack::cx_gesvd<T>(&jobu, &jobvt, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, rwork.memptr(), &info);
|
||||
@@ -3295,8 +3295,8 @@ auxlib::svd(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, Mat<eT>& A)
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
// query to find optimum size of workspace
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::gesvd()");
|
||||
lapack::gesvd<eT>(&jobu, &jobvt, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, &info);
|
||||
@@ -3377,8 +3377,8 @@ auxlib::svd(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V, Mat
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gesvd()");
|
||||
lapack::cx_gesvd<T>(&jobu, &jobvt, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, rwork.memptr(), &info);
|
||||
@@ -3491,8 +3491,8 @@ auxlib::svd_econ(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, Mat<eT>& A, const char mode
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
|
||||
arma_extra_debug_print("lapack::gesvd()");
|
||||
lapack::gesvd<eT>(&jobu, &jobvt, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, &info);
|
||||
@@ -3609,8 +3609,8 @@ auxlib::svd_econ(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1; // query to find optimum size of workspace
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gesvd()");
|
||||
lapack::cx_gesvd<T>(&jobu, &jobvt, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, rwork.memptr(), &info);
|
||||
@@ -3684,8 +3684,8 @@ auxlib::svd_dc(Col<eT>& S, Mat<eT>& A)
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::gesdd()");
|
||||
lapack::gesdd<eT>(&jobz, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, iwork.memptr(), &info);
|
||||
@@ -3755,8 +3755,8 @@ auxlib::svd_dc(Col<T>& S, Mat< std::complex<T> >& A)
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gesdd()");
|
||||
lapack::cx_gesdd<T>(&jobz, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, rwork.memptr(), iwork.memptr(), &info);
|
||||
@@ -3831,8 +3831,8 @@ auxlib::svd_dc(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, Mat<eT>& A)
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::gesdd()");
|
||||
lapack::gesdd<eT>(&jobz, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, iwork.memptr(), &info);
|
||||
@@ -3915,8 +3915,8 @@ auxlib::svd_dc(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >& V,
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gesdd()");
|
||||
lapack::cx_gesdd<T>(&jobz, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, rwork.memptr(), iwork.memptr(), &info);
|
||||
@@ -3998,8 +3998,8 @@ auxlib::svd_dc_econ(Mat<eT>& U, Col<eT>& S, Mat<eT>& V, Mat<eT>& A)
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::gesdd()");
|
||||
lapack::gesdd<eT>(&jobz, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, iwork.memptr(), &info);
|
||||
@@ -4083,8 +4083,8 @@ auxlib::svd_dc_econ(Mat< std::complex<T> >& U, Col<T>& S, Mat< std::complex<T> >
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gesdd()");
|
||||
lapack::cx_gesdd<T>(&jobz, &m, &n, A.memptr(), &lda, S.memptr(), U.memptr(), &ldu, V.memptr(), &ldvt, &work_query[0], &lwork_query, rwork.memptr(), iwork.memptr(), &info);
|
||||
@@ -4992,8 +4992,8 @@ auxlib::solve_rect_fast(Mat<typename T1::elem_type>& out, Mat<typename T1::elem_
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::gels()");
|
||||
lapack::gels<eT>( &trans, &m, &n, &nrhs, A.memptr(), &lda, tmp.memptr(), &ldb, &work_query[0], &lwork_query, &info );
|
||||
@@ -5090,8 +5090,8 @@ auxlib::solve_rect_rcond(Mat<typename T1::elem_type>& out, typename T1::pod_type
|
||||
|
||||
if((m*n) >= 1024)
|
||||
{
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = -1;
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = -1;
|
||||
|
||||
arma_extra_debug_print("lapack::gels()");
|
||||
lapack::gels<eT>( &trans, &m, &n, &nrhs, A.memptr(), &lda, tmp.memptr(), &ldb, &work_query[0], &lwork_query, &info );
|
||||
@@ -5258,8 +5258,8 @@ auxlib::solve_approx_svd(Mat<typename T1::pod_type>& out, Mat<typename T1::pod_t
|
||||
|
||||
blas_int lwork_min = blas_int(12)*min_mn + blas_int(2)*min_mn*smlsiz + blas_int(8)*min_mn*nlvl + min_mn*nrhs + smlsiz_p1*smlsiz_p1;
|
||||
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::gelsd()");
|
||||
lapack::gelsd(&m, &n, &nrhs, A.memptr(), &lda, tmp.memptr(), &ldb, S.memptr(), &rcond, &rank, &work_query[0], &lwork_query, iwork.memptr(), &info);
|
||||
@@ -5382,8 +5382,8 @@ auxlib::solve_approx_svd(Mat< std::complex<typename T1::pod_type> >& out, Mat< s
|
||||
|
||||
blas_int lwork_min = 2*min_mn + min_mn*nrhs;
|
||||
|
||||
eT work_query[2];
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
eT work_query[2] = {};
|
||||
blas_int lwork_query = blas_int(-1);
|
||||
|
||||
arma_extra_debug_print("lapack::cx_gelsd()");
|
||||
lapack::cx_gelsd(&m, &n, &nrhs, A.memptr(), &lda, tmp.memptr(), &ldb, S.memptr(), &rcond, &rank, &work_query[0], &lwork_query, rwork.memptr(), iwork.memptr(), &info);
|
||||
|
||||
@@ -117,8 +117,8 @@ class field
|
||||
arma_inline arma_warn_unused const oT& back() const;
|
||||
|
||||
|
||||
arma_cold inline field_injector<field> operator<<(const oT& val);
|
||||
arma_cold inline field_injector<field> operator<<(const injector_end_of_row<>& x);
|
||||
arma_deprecated inline field_injector<field> operator<<(const oT& val);
|
||||
arma_deprecated inline field_injector<field> operator<<(const injector_end_of_row<>& x);
|
||||
|
||||
|
||||
inline subview_field<oT> row(const uword row_num);
|
||||
|
||||
@@ -702,7 +702,7 @@ field<oT>::back() const
|
||||
|
||||
|
||||
template<typename oT>
|
||||
arma_cold
|
||||
arma_deprecated
|
||||
inline
|
||||
field_injector< field<oT> >
|
||||
field<oT>::operator<<(const oT& val)
|
||||
@@ -713,7 +713,7 @@ field<oT>::operator<<(const oT& val)
|
||||
|
||||
|
||||
template<typename oT>
|
||||
arma_cold
|
||||
arma_deprecated
|
||||
inline
|
||||
field_injector< field<oT> >
|
||||
field<oT>::operator<<(const injector_end_of_row<>& x)
|
||||
|
||||
@@ -2159,6 +2159,10 @@ gmm_diag<eT>::km_iterate(const Mat<eT>& X, const uword max_iter, const bool verb
|
||||
}
|
||||
#else
|
||||
{
|
||||
acc_hefts.zeros();
|
||||
acc_means.zeros();
|
||||
last_indx.zeros();
|
||||
|
||||
uword* acc_hefts_mem = acc_hefts.memptr();
|
||||
uword* last_indx_mem = last_indx.memptr();
|
||||
|
||||
|
||||
@@ -2188,6 +2188,10 @@ gmm_full<eT>::km_iterate(const Mat<eT>& X, const uword max_iter, const bool verb
|
||||
}
|
||||
#else
|
||||
{
|
||||
acc_hefts.zeros();
|
||||
acc_means.zeros();
|
||||
last_indx.zeros();
|
||||
|
||||
uword* acc_hefts_mem = acc_hefts.memptr();
|
||||
uword* last_indx_mem = last_indx.memptr();
|
||||
|
||||
|
||||
@@ -323,11 +323,7 @@ op_inv_sympd::apply_direct(Mat<typename T1::elem_type>& out, const Base<typename
|
||||
}
|
||||
|
||||
// TODO: the tinymatrix optimisation currently does not care if the given matrix is not sympd;
|
||||
// TODO: need to print a warning if the matrix is not sympd based on fast rudimentary checks,
|
||||
// TODO: ie. diagonal values are > 0, and max value is on the diagonal.
|
||||
//
|
||||
// TODO: when the major version is bumped:
|
||||
// TODO: either rework the tinymatrix optimisation to be reliably more strict, or remove it entirely
|
||||
// TODO: this is a problem for user code that expects inv_sympd() to fail for non-sympd matrices
|
||||
|
||||
if((out.n_rows <= 4) && is_cx<eT>::no)
|
||||
{
|
||||
|
||||
@@ -1343,13 +1343,13 @@ sp_auxlib::spsolve_refine(Mat<typename T1::elem_type>& X, typename T1::pod_type&
|
||||
|
||||
superlu_stat_wrangler stat;
|
||||
|
||||
char equed[8]; // extra characters for paranoia
|
||||
T rpg = T(0);
|
||||
T rcond = T(0);
|
||||
int info = int(0); // Return code.
|
||||
char equed[8] = {}; // extra characters for paranoia
|
||||
T rpg = T(0);
|
||||
T rcond = T(0);
|
||||
int info = int(0); // Return code.
|
||||
|
||||
char work[8];
|
||||
int lwork = int(0); // 0 means superlu will allocate memory
|
||||
char work[8] = {};
|
||||
int lwork = int(0); // 0 means superlu will allocate memory
|
||||
|
||||
arma_extra_debug_print("superlu::gssvx()");
|
||||
superlu::gssvx<eT>(&options, a.get_ptr(), perm_c.get_ptr(), perm_r.get_ptr(), etree.get_ptr(), equed, R.get_ptr(), C.get_ptr(), l.get_ptr(), u.get_ptr(), &work[0], lwork, b.get_ptr(), x.get_ptr(), &rpg, &rcond, ferr.get_ptr(), berr.get_ptr(), &glu, &mu, stat.get_ptr(), &info);
|
||||
|
||||
@@ -708,7 +708,9 @@ armaSetSparsePr(mxArray *matlabMatrix, const SpMat<double>& armaMatrix)
|
||||
double *sr = mxGetPr(matlabMatrix);
|
||||
mwIndex *irs = mxGetIr(matlabMatrix);
|
||||
mwIndex *jcs = mxGetJc(matlabMatrix);
|
||||
|
||||
|
||||
armaMatrix.sync();
|
||||
|
||||
mwSize n_nonzero = armaMatrix.n_nonzero;
|
||||
mwSize n_cols = armaMatrix.n_cols;
|
||||
|
||||
@@ -732,7 +734,9 @@ armaSetSparsePi(mxArray *matlabMatrix, const SpMat<double>& armaMatrix)
|
||||
double *si = mxGetPi(matlabMatrix);
|
||||
mwIndex *irs = mxGetIr(matlabMatrix);
|
||||
mwIndex *jcs = mxGetJc(matlabMatrix);
|
||||
|
||||
|
||||
armaMatrix.sync();
|
||||
|
||||
mwSize n_nonzero = armaMatrix.n_nonzero;
|
||||
mwSize n_cols = armaMatrix.n_cols;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user