# Random functions

lazylinop.wip.random.rand(shape, dtype='float', seed=None, mode='scalar', bsize=1)

Returns a new `LazyLinOp` of random entries (uniform distribution into `[0, 1)`).

Free memory cost

Whatever is the shape of the `rand`, it has no memory cost if `'scalar'` mode is used.

Args:
shape: (`tuple[int, int]`)

Shape of the random `LazyLinOp`.

dtype: (`str`)

numpy dtype of the random `LazyLinOp`.

mode: (`str`)
• `'scalar'`: uses only random scalars, one by one to compute the multiplication. Memory cost: one scalar.

• `'vector'`: uses only a random vectors, one by one to compute the multiplication. Memory cost: one vector of size `shape[1]`.

• `'block'`: computes the multiplication by generating blocks of random values (one by one). The size of each block is max(`bsize`, shape[1]).

• `'array'`: uses a full array of random entries of dimensions `shape` to compute the multiplication. Memory cost: array of dimensions `shape`.

seed: (`int`)

Seed for initialization of the numpy PRNG (Mersenne Twister).

Example:
```>>> from lazylinop import rand
>>> lr = rand((4, 5), seed=42)
>>> lr.toarray()
array([[0.54199389, 0.61966721, 0.05736978, 0.81190365, 0.86009402],
[0.62760232, 0.68193335, 0.67527253, 0.48076406, 0.73472516],
[0.15634112, 0.72853736, 0.21693909, 0.7016948 , 0.96408854],
[0.27678254, 0.70566135, 0.88665806, 0.61825175, 0.97278719]])
```
Returns:

The random `LazyLinOp`.