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 :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
B = [];
for i = 1:36
    B = [B; A_i];
end
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
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
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 ?

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