NumCpp  2.6.2
A Templatized Header Only C++ Implementation of the Python NumPy Library
svd.hpp
Go to the documentation of this file.
1 
28 #pragma once
29 
33 #include "NumCpp/NdArray.hpp"
34 
35 #include <utility>
36 
37 namespace nc
38 {
39  namespace linalg
40  {
41  //============================================================================
42  // Method Description:
52  template<typename dtype>
53  void svd(const NdArray<dtype>& inArray, NdArray<double>& outU, NdArray<double>& outS, NdArray<double>& outVt)
54  {
56 
57  SVD svdSolver(inArray.template astype<double>());
58  outU = svdSolver.u();
59 
60  NdArray<double> vt = svdSolver.v().transpose();
61  outVt = std::move(vt);
62 
63  NdArray<double> s = diagflat(svdSolver.s(), 0);
64  outS = std::move(s);
65  }
66  } // namespace linalg
67 } // namespace nc
#define STATIC_ASSERT_ARITHMETIC(dtype)
Definition: StaticAsserts.hpp:37
Holds 1D and 2D arrays, the main work horse of the NumCpp library.
Definition: NdArrayCore.hpp:72
Definition: SVDClass.hpp:48
const NdArray< double > & u() noexcept
Definition: SVDClass.hpp:77
const NdArray< double > & s() noexcept
Definition: SVDClass.hpp:101
const NdArray< double > & v() noexcept
Definition: SVDClass.hpp:89
void svd(const NdArray< dtype > &inArray, NdArray< double > &outU, NdArray< double > &outS, NdArray< double > &outVt)
Definition: svd.hpp:53
Definition: Coordinate.hpp:45
NdArray< dtype > diagflat(const NdArray< dtype > &inArray, int32 k=0)
Definition: diagflat.hpp:51