Boost logo

Ublas :

Subject: [ublas] Converting Fortran 90 array access to use Matrix?
From: Reich, Darrell (DARRELL.REICH_at_[hidden])
Date: 2014-01-08 20:05:45


What is the most efficient way to convert Fortran's column array access
like shown below to C++?

a(i,:) = 0 ! set entire column to zero

 

I suspect best solution might use matrix proxies like matrix_row?

Can this be done on one line without the for loop?

Can you help me fix the syntax on the commented out code that attempted
to use iterators?

 

#include "boost/numeric/ublas/matrix.hpp"

#include "boost/numeric/ublas/matrix_proxy.hpp"

#include "boost/numeric/ublas/io.hpp"

 

int main()

{

   const int N = 3;

   boost::numeric::ublas::matrix<double> M(N,N,1.0);

 
boost::numeric::ublas::matrix_row<boost::numeric::ublas::matrix<double>
> row1(M,1);

   //??std::vector<boost::numeric::ublas::matrix<double>*>::iterator
mit;

 

   //??how to set the matrix row to zero on one line like Fortran 90
a(1,:)=0.0

   //for (mit = row1.begin(); mit != row1.end(); ++mit)

   //for_each(row1.begin(), row1.end(), [] (const std::unique_ptr<??>&
ptr)

   for (int i = 0; i < row1.size(); ++i) // not i++

      row1(i) = 0.0;

 

   std::cout << "row = " << row1 << std::endl;

   std::cout << "Matrix = " << M << std::endl;

 

   return N;

}