Thank you again for your responses. I installed Armadillo, BLAS, and LAPACK. Armadillo seems to be working, since I can do basic operations with matrices using it
Whenever I try to use the *pinv* function inside my OOT block, I get the error : *AttributeError: 'module' object has no attribute 'cca_update'* I just comment the line about the pinv, and no error appears. I have added the packages in the CMakelist, and I made sure that the libraries were added in the armadillo file *arma_config.hpp*. See details below. Thank you! cca_update_impl::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { ....... ............. arma::mat mat_GT; arma::mat mat_NS; arma::mat Cx; arma::mat Cy; arma::mat Cxy; arma::sp_mat A; Cx = mat_NS*mat_NS.t(); Cy = mat_GT*mat_GT.t(); Cxy = mat_NS*mat_GT.t(); A = pinv(Cx)*Cxy*pinv(Cy)*Cxy.t() } *CMakeLists.txt file in my OOT Module* ######################################################################## # Find gnuradio build dependencies ######################################################################## find_package(BLAS REQUIRED) find_package(LAPACK REQUIRED) message(STATUS "LAPACK libraries: ${LAPACK_LIBRARIES}") message(STATUS "BLAS libraries: ${BLAS_LIBRARIES}") find_package(Armadillo) *output of cmake ../* - A library with BLAS API found. -- A library with BLAS API found. -- A library with LAPACK API found. -- LAPACK libraries: /usr/lib/x86_64-linux-gnu/liblapack.so;/usr/lib/x86_64-linux-gnu/libf77blas.so;/usr/lib/x86_64-linux-gnu/libatlas.so -- BLAS libraries: /usr/lib/x86_64-linux-gnu/libf77blas.so;/usr/lib/x86_64-linux-gnu/libatlas.so -- Found Armadillo, building MUSIC *arma_config.hpp file* CMakeLists.txt file in my OOT Module #if !defined(ARMA_USE_LAPACK) #define ARMA_USE_LAPACK //// Comment out the above line if you don't have LAPACK or a high-speed replacement for LAPACK, //// such as Intel MKL, AMD ACML, or the Accelerate framework. //// LAPACK is required for matrix decompositions (eg. SVD) and matrix inverse. #endif #if !defined(ARMA_USE_BLAS) #define ARMA_USE_BLAS //// Comment out the above line if you don't have BLAS or a high-speed replacement for BLAS, //// such as OpenBLAS, GotoBLAS, Intel MKL, AMD ACML, or the Accelerate framework. //// BLAS is used for matrix multiplication. //// Without BLAS, matrix multiplication will still work, but might be slower. #endif On Fri, Jan 17, 2020 at 3:18 PM Laura Arjona <arjo...@uw.edu> wrote: > Thank you all so much for the detailed responses, really appreciate it. > > To give some background, my application is to build a CCA (canonical > correlation analysis) filter as an OOT C++ block. And the inputs are two > digital signals (represented as matrices) - one of them I receive and > decode real time with my SDR (using usrp n210 with ubuntu). > > I am going to try Eigen and Armadillo to start with. > > Cheers > Laura. > > On Thu, Jan 16, 2020 at 2:33 PM Müller, Marcus (CEL) <muel...@kit.edu> > wrote: > >> True, Eigen is pretty popular for people needing to do Matrix >> operations – I wasn't aware they even have Matrix decompositions[1]! >> (in hindsight... considering the library name...) >> I like Eigen, but there's two caveats, I find: >> >> 1. indexing is done with () instead of [] (I guess it's made for people >> who come from Matlab) >> 2. It's very much mathematician's software – I found (but that's about >> a decade in the past, at the very least, so older compilers, older >> processors, older Eigen) that things like Matrix·Matrix products were >> relatively slow >> >> I do recommend it to students that simply need some Matrix >> functionality, as performance usually is of secondary concern and can >> be optimized as soon as the software works. >> >> Best regards, >> Marcus >> >> [1] >> >> http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html >> On Fri, 2020-01-17 at 11:16 +1300, Jeremy Reeve wrote: >> > Hi Laura, >> > >> > Just to add to the suggestions, I've seen Eigen [1] used in the past. >> > It's a template library (headers only) and has no external >> > dependencies other than the standard library and that might be >> > something to consider given your use-case. >> > >> > [1] http://eigen.tuxfamily.org/index.php?title=Main_Page >> > >> > Jeremy >> > >> > On Fri, 17 Jan 2020 at 10:02, Laura Arjona <arjo...@uw.edu> wrote: >> > > Hi all, >> > > >> > > Is there any library to use in gnuradio for algebra operations, such >> as matrix eigenvalues, and pseudoinverse? Or I'd need to code them myself >> in C++? >> > > >> > > I need to integrate those operations into my OOT C++ blocks. >> > > >> > > Thanks for your time >> > > >> > > Best >> > > >> > > -- >> > > Laura Arjona >> > > Washington Research Foundation Innovation Postdoctoral Fellow in >> Neuroengineering >> > > >> > > Paul G. Allen School of Computer Science & Engineering >> > > 185 E Stevens Way NE >> > > University of Washington >> > > Seattle, WA 98195-2350 >> > > > -- > *Laura Arjona * > Washington Research Foundation Innovation Postdoctoral Fellow in > Neuroengineering > > *Paul G. Allen School of Computer Science & Engineering* > 185 E Stevens Way NE > University of Washington > Seattle, WA 98195-2350 > -- *Laura Arjona * Washington Research Foundation Innovation Postdoctoral Fellow in Neuroengineering *Paul G. Allen School of Computer Science & Engineering* 185 E Stevens Way NE University of Washington Seattle, WA 98195-2350