Boost logo

Ublas :

Subject: [ublas] unexpected result with vector_slice
From: TENG Wenxuan (wteng_at_[hidden])
Date: 2009-06-08 10:58:45


Hello there,
 
I've observed an unexpected result when I use vector_slice with the
following code:

 typedef boost::numeric::ublas::vector<double> udvector;
 typedef boost::numeric::ublas::vector<float> uvector;
 
 size_t block_size = 3;
 
 uvector v1(9);
 udvector v2(9);
 
 for(size_t i=0; i<9; i++) {
  v1[i] = i;
  v2[i] = i+10;
 }
 
 cout << "v1="<<v1<<endl;
 cout << "v2="<<v2<<endl;
 
 boost::numeric::ublas::slice vs(0, 1, block_size);
 
 const boost::numeric::ublas::vector_slice<const udvector> blk_v1(v1,
vs);
 
 cout << "blk_v1=" << blk_v1 << endl;
 
 udvector blk_v2(boost::numeric::ublas::project(v2, vs));
 
 cout << "blk_v1=" << blk_v1 << endl;
 

The ouput of the above code :

v1=[9](0,1,2,3,4,5,6,7,8)
v2=[9](10,11,12,13,14,15,16,17,18)
blk_v1=[3](0,1,2)
blk_v1=[3](10,11,12)

 
The last line of the output shows that the content of the
vector_slice<const udvector> blk_v1 is wrong. I wonder if the problem is
due to the fact that vector_slice has the different type (double) as the
vector v1(float). However, there is not any compilation warnings or
errors for this. Moreover, the problem doesn't show up if we just switch
the order of the two lines such that :
udvector blk_v2(boost::numeric::ublas::project(v2, vs))
const boost::numeric::ublas::vector_slice<const udvector> blk_v1(v1,
vs);
 
could anyone explain, thank you
Myt est environment: Linux centos, gcc3_4, boost 1_38
 
Wenxuan Teng