Azzera filtri
Azzera filtri

Vectorized generation of a cell

1 visualizzazione (ultimi 30 giorni)
Amir Mahmoudi
Amir Mahmoudi il 22 Dic 2023
Commentato: Matt J il 23 Dic 2023
x = 1 : a; y = 1 : b; z(x,y) = {randperm(d,2)}; a non-repeating cell is desired. No for loops please.
  2 Commenti
Jon
Jon il 22 Dic 2023
How are the values of a and b used. What is the value of d?
Amir Mahmoudi
Amir Mahmoudi il 22 Dic 2023
a, b, d are any numbers.

Accedi per commentare.

Risposta accettata

Matt J
Matt J il 22 Dic 2023
Modificato: Matt J il 22 Dic 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 Commenti
Amir Mahmoudi
Amir Mahmoudi il 23 Dic 2023
I accepted the answer because of the comments. The answer is not what I wanted.
Matt J
Matt J il 23 Dic 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]}

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by