Bonjour à toute la communauté !
J'ai une petite question :
A l'intérieur d'une boucle parfor, j'ai une fonction qui calcule à chaque itération i une matrice A_i (Les valeurs de A_i sont différentes d'une itération à l'autre, les dimensions restent les mêmes) de dimensions :
H = 239 (lignes) et L = 57121 (colonnes). La matrice A_i étant grande et comportant pas mal de zéros, je peux utiliser les sparses matrix.
Chaque matrice A_i est une sous partie d'une plus grande matrice B. L'idée est de construire la matrice B de telle manière :
Le problème est que cette méthode ne permet pas une préallocation de la mémoire. Ainsi jusqu'à présent j'ai opté pour cette solution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 B = []; for i = 1:36 B = [B; A_i]; end
Ce que j'aimerai c'est pouvoir construire la matrice B d'une manière plus astucieuse et surtout moins couteuse en espace mémoire sans pour autant augmenter drastiquement le temps de calcul. Pensez vous qu'il y a une manière un peu plus propre de faire ceci ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 parfor i = 1:36 A(i) = {sparse(ma_fonction_calcul_A_i())}; end B = sparse(H*36,L); for i = 1:36 B((i-1)*H+1:i*H,:) = A{i}; end
Merci d'avance pour vos retours ! Si jamais il y a des points qui ne sont pas très clairs n'hésitez pas
Bonne journée à tous.
Alex
Partager