Je n'ai jamais utilisé PackedArray auparavant, mais j'ai commencé à les utiliser après avoir lu une discussion à ce sujet ici aujourd'hui.
J'ai beaucoup de matrices de grande taille en 1D et 2D de réels seulement, sans symboles (c'est un solveur d'équations aux différences finies), et j'ai donc pensé que je devrais profiter de l'utilisation de PackedArray.
J'ai une fonction d'initialisation où j'alloue toutes les données/grilles nécessaires. J'ai donc utilisé ToPackedArray
sur elles. Cela semble un peu plus rapide, mais je dois faire plus de tests de performance pour mieux comparer la vitesse avant et après et aussi comparer l'utilisation de la RAM.
Mais pendant que je regardais cela, j'ai remarqué que certaines opérations en M renvoient automatiquement des listes en PackedArray, et d'autres non.
Par exemple, cela ne renvoie pas de packed array
a = Table[RandomReal[], {5}, {5}];
Developer`PackedArrayQ[a]
Mais cela le fait
a = RandomReal[1, {5, 5}];
Developer`PackedArrayQ[a]
et cela le fait aussi
a = Table[0, {5}, {5}];
b = ListConvolve[ {{0, 1, 0}, {1, 4, 1}, {0, 1, 1}}, a, 1];
Developer`PackedArrayQ[b]
et la multiplication de matrices renvoie le résultat en packed array
a = Table[0, {5}, {5}];
b = a.a;
Developer`PackedArrayQ[b]
Mais la multiplication élément par élément ne le fait pas
b = a*a;
Developer`PackedArrayQ[b]
Ma question : Y a-t-il une liste quelque part qui documente quelles commandes M renvoient PackedArray vs. pas? (en supposant que les données répondent aux exigences, telles que Real, pas de mélange, pas de symboles, etc..)
Aussi, une question mineure, pensez-vous qu'il serait mieux de vérifier d'abord si une liste/matrice créée est déjà packée avant d'appeler ToPackedArray
dessus? Je pense que l'appeler ToPackedArray
sur une liste déjà packée ne coûtera rien, car l'appel se terminera immédiatement.
merci,
mise à jour (1)
Je voulais juste mentionner que j'ai découvert que les symboles PackedArray ne sont pas autorisés dans une démo CDF car j'ai eu une erreur en en téléchargeant une avec un tel symbole. J'ai donc dû supprimer tout mon code de pack. Comme j'écris principalement des démos, ce sujet est maintenant juste d'un intérêt académique pour moi. Mais je voulais remercier tout le monde pour le temps et les bonnes réponses.