# How to reshape two cell arrays of strings into a cell array of cell arrays

4 visualizzazioni (ultimi 30 giorni)
Paolo Binetti il 4 Mar 2017
Commentato: Star Strider il 4 Mar 2017
Is there a neat way to vectorize the for-loop below?
n_nodes = 2^(20-1);
nodes = cellstr(dec2bin(0:n_nodes-1))';
suffixes = [nodes nodes];
row1 = suffixes(:,1:2:end);
row2 = suffixes(:,2:2:end);
edges = cell(1,n_nodes);
for i = 1:n_nodes
edges(i) = {[row1(i) row2(i)]};
end
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Star Strider il 4 Mar 2017
I did not time this with respect to your loop, so I don’t know if it’s faster:
edges = mat2cell([row1' row2'], ones(1,size(row1,2)), 2);
This creates a column vector of cells. Transpose it if you want a row vector of cells:
edges = mat2cell([row1' row2'], ones(1,size(row1,2)), 2)';
##### 2 CommentiMostra NessunoNascondi Nessuno
Paolo Binetti il 4 Mar 2017
I timed it and it's 15x faster. Thank you.
Star Strider il 4 Mar 2017
My pleasure!

Accedi per commentare.

### Più risposte (1)

John BG il 4 Mar 2017
Hi Paolo
the following has the same size and type as the result of your for loop
A=reshape({row1{:} row2{:}},2,8);B=A'
B
=
'000' '010'
'100' '110'
'000' '010'
'100' '110'
'001' '011'
'101' '111'
'001' '011'
'101' '111'
whos('B')
Name Size Bytes Class Attributes
B 8x2 1888 cell
John BG
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Paolo Binetti il 4 Mar 2017
Hi John, thank you but I am not getting the same result.

Accedi per commentare.

### Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by