NumCpp  2.1.0
A C++ implementation of the Python Numpy library
svd.hpp
Go to the documentation of this file.
1 #pragma once
30 
34 #include "NumCpp/NdArray.hpp"
35 
36 #include <utility>
37 
38 namespace nc
39 {
40  namespace linalg
41  {
42  //============================================================================
43  // Method Description:
53  template<typename dtype>
54  void svd(const NdArray<dtype>& inArray, NdArray<double>& outU, NdArray<double>& outS, NdArray<double>& outVt)
55  {
57 
58  SVD svdSolver(inArray.template astype<double>());
59  outU = svdSolver.u();
60 
61  NdArray<double> vt = svdSolver.v().transpose();
62  outVt = std::move(vt);
63 
64  NdArray<double> s = diagflat(svdSolver.s(), 0);
65  outS = std::move(s);
66  }
67  } // namespace linalg
68 } // namespace nc
StaticAsserts.hpp
STATIC_ASSERT_ARITHMETIC
#define STATIC_ASSERT_ARITHMETIC(dtype)
Definition: StaticAsserts.hpp:38
nc::linalg::SVD::s
const NdArray< double > & s() noexcept
Definition: SVDClass.hpp:102
nc::linalg::SVD
Definition: SVDClass.hpp:48
nc::NdArray::transpose
NdArray< dtype > transpose() const
Definition: NdArrayCore.hpp:4608
nc::NdArray< dtype >
NdArray.hpp
nc::linalg::svd
void svd(const NdArray< dtype > &inArray, NdArray< double > &outU, NdArray< double > &outS, NdArray< double > &outVt)
Definition: svd.hpp:54
nc::linalg::SVD::v
const NdArray< double > & v() noexcept
Definition: SVDClass.hpp:90
nc::diagflat
NdArray< dtype > diagflat(const NdArray< dtype > &inArray, int32 k=0)
Definition: diagflat.hpp:52
nc
Definition: Coordinate.hpp:45
nc::linalg::SVD::u
const NdArray< double > & u() noexcept
Definition: SVDClass.hpp:78
diagflat.hpp
SVDClass.hpp