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

2 vues (au cours des 30 derniers jours)
Mantas Vaitonis
Mantas Vaitonis le 2 Juil 2018
Commenté : Guillaume le 3 Juil 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 commentaire
Guillaume
Guillaume le 3 Juil 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

Connectez-vous pour commenter.

Réponses (1)

KL
KL le 2 Juil 2018
Modifié(e) : KL le 2 Juil 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 commentaire
Mantas Vaitonis
Mantas Vaitonis le 2 Juil 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,:),:).

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by