22 #ifndef _BLAZE_MATH_COMPRESSEDVECTOR_H_
23 #define _BLAZE_MATH_COMPRESSEDVECTOR_H_
52 template<
typename Type
54 class Rand< CompressedVector<Type,TF> >
60 inline const CompressedVector<Type,TF>
generate(
size_t size )
const;
61 inline const CompressedVector<Type,TF>
generate(
size_t size,
size_t nonzeros )
const;
63 template<
typename Arg >
64 inline const CompressedVector<Type,TF>
generate(
size_t size,
const Arg&
min,
const Arg&
max )
const;
66 template<
typename Arg >
67 inline const CompressedVector<Type,TF>
generate(
size_t size,
size_t nonzeros,
const Arg&
min,
const Arg&
max )
const;
74 inline void randomize( CompressedVector<Type,TF>& vector )
const;
75 inline void randomize( CompressedVector<Type,TF>& vector,
size_t nonzeros )
const;
77 template<
typename Arg >
78 inline void randomize( CompressedVector<Type,TF>& vector,
const Arg&
min,
const Arg&
max )
const;
80 template<
typename Arg >
81 inline void randomize( CompressedVector<Type,TF>& vector,
size_t nonzeros,
const Arg&
min,
const Arg&
max )
const;
96 template<
typename Type
98 inline const CompressedVector<Type,TF>
99 Rand< CompressedVector<Type,TF> >::generate(
size_t size )
const
101 CompressedVector<Type,TF> vector( size );
119 template<
typename Type
121 inline const CompressedVector<Type,TF>
122 Rand< CompressedVector<Type,TF> >::generate(
size_t size,
size_t nonzeros )
const
124 if( nonzeros > size )
125 throw std::invalid_argument(
"Invalid number of non-zero elements" );
127 CompressedVector<Type,TF> vector( size, nonzeros );
145 template<
typename Type
147 template<
typename Arg >
148 inline const CompressedVector<Type,TF>
149 Rand< CompressedVector<Type,TF> >::generate(
size_t size,
const Arg&
min,
const Arg&
max )
const
151 CompressedVector<Type,TF> vector( size );
171 template<
typename Type
173 template<
typename Arg >
174 inline const CompressedVector<Type,TF>
175 Rand< CompressedVector<Type,TF> >::generate(
size_t size,
size_t nonzeros,
const Arg&
min,
const Arg&
max )
const
177 if( nonzeros > size )
178 throw std::invalid_argument(
"Invalid number of non-zero elements" );
180 CompressedVector<Type,TF> vector( size, nonzeros );
196 template<
typename Type
198 inline void Rand< CompressedVector<Type,TF> >
::randomize( CompressedVector<Type,TF>& vector )
const
200 const size_t size( vector.size() );
202 if( size == 0UL )
return;
204 const size_t nonzeros( rand<size_t>( 1UL, std::ceil( 0.5*size ) ) );
207 vector.reserve( nonzeros );
209 while( vector.nonZeros() < nonzeros ) {
210 vector[ rand<size_t>( 0UL, size-1UL ) ] = rand<Type>();
226 template<
typename Type
228 inline void Rand< CompressedVector<Type,TF> >
::randomize( CompressedVector<Type,TF>& vector,
size_t nonzeros )
const
230 const size_t size( vector.size() );
232 if( nonzeros > size )
233 throw std::invalid_argument(
"Invalid number of non-zero elements" );
235 if( size == 0UL )
return;
238 vector.reserve( nonzeros );
240 while( vector.nonZeros() < nonzeros ) {
241 vector[ rand<size_t>( 0UL, size-1UL ) ] = rand<Type>();
257 template<
typename Type
259 template<
typename Arg >
260 inline void Rand< CompressedVector<Type,TF> >
::randomize( CompressedVector<Type,TF>& vector,
261 const Arg& min,
const Arg& max )
const
263 const size_t size( vector.size() );
265 if( size == 0UL )
return;
267 const size_t nonzeros( rand<size_t>( 1UL, std::ceil( 0.5*size ) ) );
270 vector.reserve( nonzeros );
272 while( vector.nonZeros() < nonzeros ) {
273 vector[ rand<size_t>( 0UL, size-1UL ) ] = rand<Type>( min, max );
291 template<
typename Type
293 template<
typename Arg >
294 inline void Rand< CompressedVector<Type,TF> >
::randomize( CompressedVector<Type,TF>& vector,
295 size_t nonzeros,
const Arg& min,
const Arg& max )
const
297 const size_t size( vector.size() );
299 if( nonzeros > size )
300 throw std::invalid_argument(
"Invalid number of non-zero elements" );
302 if( size == 0UL )
return;
305 vector.reserve( nonzeros );
307 while( vector.nonZeros() < nonzeros ) {
308 vector[ rand<size_t>( 0UL, size-1UL ) ] = rand<Type>( min, max );