Generate random number between a given sequence using rand and exisiting matrix

Hello,
Is there a way I can generate a random number vector of dimensions N*M*K between a given defined sequence? For example, I would like to generate a 256*2500*16 matrix and the elements of this matrix should be say between the values,8e-4 and 2.5e-8? I have tried to use the rand function with the 'like' option but don't see how to generate between that sequence.
my_needed_matrix = rand(size(my_existing_matrix),'like',my_existing_matrix);
Here my_existing_matrix is the matrix which from which I wish to create another matrix of similar values.
Thank you!

1 Comment

You haven't given any information as to how your existing matrix is supposed to contribute to the solution other than by giving its size which is rather trivial. Based on the information you have given Andrei's answer and your plot of it gives exactly what I would expect from your question.

Sign in to comment.

Answers (1)

a = 2.5e-8;
b = 8e-4;
my_needed_matrix = rand(size(my_existing_matrix))*(b - a)+a;
Please read MATLAB Documentation about it.

6 Comments

Thanks Andrei..it partially fixed my issue. Please see the attached images. The red is my_existing_matrix and the green is how its coming up with the new code.Is it possible to generate an output like the red one?
Maybe so? (but here my_existing_matrix is vector as in your images):
out = zeros(numel(my_existing_matrix),1);
t = my_existing_matrix ~= 0;
out(t) = rand(sum(t),1)*6e-5 + 1.5e-5;
The last line
out(t) = rand(sum(t),1)*6e-5 + 1.5e-5;
gives the following error
Error using rand Size inputs must be scalar.
.. I wrote: ".. but here my_existing_matrix is vector as in your images" so that my_existing_matrix should be vector.
and please attach your data as mat - file what you getting in images.
Its a huge mat file ~ 71MB. so I don't think its possible to attach it here. my_existing_matrix is a 256*2500*16 double
The trace exists between points 500 and ~650..so I tried to write this
out(t(:,500:650,:)) = rand(sum(t),1)*6e-5 + 1.5e-5;
but it still returns the previous error. So you see, between these two points I need something which rises upto say 575, and then decreases to zero for the other half.

Sign in to comment.

Categories

Asked:

on 26 Sep 2016

Commented:

on 26 Sep 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!