2017-06-22 5 views
1

Je travaille avec des matrices multidimensionnelles (environ 100 dimensions, voir plus bas pourquoi). Ma matrice sont des tableaux NumPy et je les multiplie principalement les uns avec les autres.Quelles sont les limites de la vectorisation?

Est-ce que NumPy se soucie (en ce qui concerne la vitesse ou la précision) sous quelle forme je lui demande de multiplier ces matrices? C'est à dire. Serait-il sensé de les transformer en un réseau linéaire avant d'effectuer la multiplication? J'ai fait un test avec des matrices aléatoires, et cela ne semblait pas pertinent, mais je voudrais avoir un aperçu théorique de cela.

Je suppose qu'il y a une limite à la taille des matrices et à leur taille, avant que Python ne les traite lentement. Y a-t-il un moyen de trouver cette limite?


J'ai plusieurs espèces (biologie) et je veux attribuer à chacune de ces espèces une forme physique. Ensuite, je veux voir comment ces différentes finesses affectent le résultat de la compétition. Et je veux vérifier toutes les combinaisons de fitness possibles de toutes les espèces. Mes matrices ont de nombreuses dimensions, mais toutes les dimensions sont assez petites.

+0

De quel genre de multiplication voulez-vous parler? –

+0

Multiplication normale 'a * b'. Est-ce que la forme de «a» et de «b» a de l'importance (du moment qu'ils ont la même chose)? –

+1

Il est à noter que NumPy effectue ces opérations en code C ou C++ compilé (ou même en appelant des bibliothèques numériques Fortran (?)), Donc il ne serait pas "Python" ** qui soit lent ou lent. (Bien que le calcul se produise toujours dans le processus et le thread Python, ce serait toujours là où vous le "sentiriez", bien sûr.) –

Répondre

4

Pour la multiplication par éléments cela n'a pas d'importance, et aplatir le tableau ne change rien. Rappelez-vous: les tableaux, quelle que soit leur dimension, sont enregistrés linéairement dans la RAM. Si vous aplatissez le tableau avant la multiplication, vous changez seulement la façon dont NumPy vous présente les données, les données dans la RAM ne sont jamais touchées. La multiplication des données 1D ou 100D est exactement la même opération.