Learning / Internship Projects & Reports


Name: perrin
Date added: 2010-03-04 15:11:01
Hits: 555
Community Space
Link to internship report if online:
Type of learner



C++ linear algebra library


Armadillo is a C++ linear algebra library (matrix maths) aiming towards a good balance between speed and ease of use. Integer, floating point and complex numbers are supported, as well as a subset of trigonometric and statistics functions. Various matrix decompositions are provided through optional integration with LAPACK and ATLAS libraries.

A delayed evaluation approach is employed (during compile time) to combine several operations into one and reduce (or eliminate) the need for temporaries. This is accomplished through recursive templates and template meta-programming.

This library is useful if C++ has been decided as the language of choice (due to speed and/or integration capabilities), rather than another language like Matlab ® or Octave. It is distributed under a license that is useful in both open-source and commercial contexts.

Armadillo is primarily developed at NICTA (Australia), with contributions from around the world.


1) 02/12/2010 We are recruiting  people for developing the fast fourier transform.

2) 02/05/2010 -- Version 0.9.0 released  download.



 Remarks - Comments:
1) Developing an industrial robust fft-ifft feels like a kiss of death -- DONT TRY THIS AT HOME!!! Laughing


 Main Developers:

  •      Conrad Sanderson, http://www.itee.uq.edu.au/~conrad/  -- Lead Developer
  •      Ian Cullinan
  •      Dimitrios Bouzas - dmpouzas@csd.auth.gr -- That's me Smile...

My evolvement in the project:

- I sent an email to the developer of the project, where i introduced myself and asked to implement new functions for the project. The developer's answer was rather positive. He warned me that it would not be easy but they were open to collaboration and asked me what functionality i was thinking about.

- I proposed some functionalities (repmat, covariance matrix, pca, etc) and he found them useful. He also told me i should have the same programming style as the rest of the project and that i should send him the source code for repmat.

- I asked him to give me some time to comprehend the programming style and change the source code to comply with their standards. He agreed and when i sent him the source code he thanked me for the contribution and pointed out some issues about the implementation.

- We exchanged several emails about the repmat function and collaborated to get it done correctly. After that, i implemented one by one the rest of the functionalities and their documentation. We exchanged emails continuously about comments/corrections on the source code i implemented.

- I was promoted to Main Developer to the project.

  • Already Commited Work
    • repmat function: Function repmat replicates a matrix, similar to matlab's repmat
    • cov function: Function cov calculates the covariance matrix of a matrix.
    • cor function: Function cor calculates the correlation coefficients of a matrix.
    • shuffle function: Function shuffle shuffles the rows or the columns of a matrix in a random fashion.
    • pinv function: Function pinv returns the Penrose-Moore inverse of a matrix.
    • eps function: Function eps returns the difference from the next representable floating point number.
    • rank function: Function rank returns the rank of a matrix.
    • kron function: Function that returns the Kronecker tensor product of two matrices.
    • princomp: Function princomp computes the principal components of a matrix. Basically does principal components analysis (pca).
  1. Work Under development
    • fft and ifft function: Functions fft and ifft compute the Discrete Fourier Transform of a real or complex valued vector. fft signifies forward transform while ifft signifies its inverse.
    • normr function: Function normr normalizes the elements of a matrix considering its rows.
    • normc function: Function normc normalizes the elements of a matrix considering its columns.

Difficulties I encountered:
  1. I had to refer to the documentation and find information about C++ Templates and C++ Metaprogramming
  2. I had to familiarize with the group's programming style
  3. The only way to communicate was trough emails, since there was no forum.

Benefits from the project:
  1. I improved my programming skills
  2. I added a very strong bullet to my résumé
  3. I met new people from other countries and their culture
  4. I felt extremely creative


Associated Links:

Another goodie from 2009
on May 14, 2010
Hi Dimitris

Congrats that you have been promoted to be a main developer! Well done!
Also, thanks for providing the details on what you are doing, your achievements, further links, etc. I hope this will help other students and see what can be achieved within the course!


Project leader's reply

Thanks a lot Andreas. I hope that this course will make the students in my school understand that it's a big world out there :). Everybody is complaining that after they get their degrees the employers ask for previous experience, and their immediate answer is "how I'm supposed to have previous experience, since I've just finished school". Well here is the solution 1) Join an open project 2) Work hard to make it great -> Result: "here's my experience Mr employer...".
Best Regards
RSS Feeds