Clear Filters
Clear Filters

Vectorized generation of a cell

1 view (last 30 days)
Amir Mahmoudi
Amir Mahmoudi on 22 Dec 2023
Commented: Matt J on 23 Dec 2023
x = 1 : a; y = 1 : b; z(x,y) = {randperm(d,2)}; a non-repeating cell is desired. No for loops please.
  2 Comments
Jon
Jon on 22 Dec 2023
How are the values of a and b used. What is the value of d?
Amir Mahmoudi
Amir Mahmoudi on 22 Dec 2023
a, b, d are any numbers.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 22 Dec 2023
Edited: Matt J on 22 Dec 2023
There is no way to create or manipulate cells without for-loops. Things like mat2cell, num2cell, etc... all have for-loops inside them. So do things like cellfun, arrayfun, etc...
It is not clear why you would want a cell array. Your data can be stored in an a-by-b-by-2 array.
a=5; b=3; d=7;
I=nchoosek(1:d,2);
I=[I;fliplr(I)];
r=randi(height(I),a*b,1);
z= reshape(I(r,:) ,a,b,2)
z =
z(:,:,1) = 5 1 1 2 1 1 3 4 2 5 1 1 1 1 5 z(:,:,2) = 7 5 5 5 3 4 5 7 7 6 7 6 2 3 6
  11 Comments
Amir Mahmoudi
Amir Mahmoudi on 23 Dec 2023
I accepted the answer because of the comments. The answer is not what I wanted.
Matt J
Matt J on 23 Dec 2023
It must be a cell. If there is no way, then I have to use for loops.
If you don't care about avoiding for-loops anymore, you can take the result of my proposed code and convert it to a cell with num2cell:
a=5; b=3; d=7;
I=nchoosek(1:d,2);
I=[I;fliplr(I)];
r=randi(height(I),a*b,1);
z= reshape( num2cell(I(r,:),2) ,a,b)
z = 5×3 cell array
{[6 2]} {[2 1]} {[5 7]} {[4 5]} {[3 5]} {[5 7]} {[1 2]} {[7 3]} {[4 7]} {[7 5]} {[3 7]} {[1 4]} {[1 4]} {[2 4]} {[2 6]}

Sign in to comment.

More Answers (0)

Tags

Community Treasure Hunt

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

Start Hunting!