# How to change cell arrays to 3D arrays in order to speed up calculations?

1 Ansicht (letzte 30 Tage)
Mantas Vaitonis am 2 Jul. 2018
Kommentiert: Guillaume am 3 Jul. 2018
Hello, For example I have two cell arrays x {10}(20x5) non integer values and k {10}(5x1) integer values 1:5, and use one cell array as index to other array.
x1=cellfun(@(x,y) x(5,y),x,k, 'UniformOutput',false);
and result is x1 {10}(1x5), unfortunately cell fun is slow with gpuArray when working with bigger arrays, what would be the way to use 3D arrays and maybe arrayfun for this?
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
Guillaume am 3 Jul. 2018
Mantas Vaitonis's comment mistakenly posted as an answer moved here:
An example would be if
x(:,:,1)
1 8 10 2 5
3 5 7 9 11
4 5 2 3 7
12 10 4 6 2
9 7 10 1 3
.....
and k(:,:,1)
3
4
1
5
3
then x1(:,:1) would be
10 1 9 3 10

Melden Sie sich an, um zu kommentieren.

### Antworten (1)

KL am 2 Jul. 2018
Bearbeitet: KL am 2 Jul. 2018
Convert x into a 3d matrix using
x_mat = cat(3,x{:});
and then if you want to extract 5th row from all the pages,
x_mat(5,:,:) %squeeze(x_mat(5,:,:)) , if you want a 2D matrix
##### 1 Kommentar-1 ältere Kommentare anzeigen-1 ältere Kommentare ausblenden
Mantas Vaitonis am 2 Jul. 2018
It is not that only 5th row is needed, but columns indexes should be taken from k {10}(5x1) where integer values from 1 to 5, that x(5,k(:,1,:),:).

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by