2009-06-13 10 views

Répondre

1

Here's a forum post qui a quelques exemples de code de ce que vous essayez d'atteindre.

+0

Cela aura des performances médiocres pour une telle matrice de bits, cependant. Juste le créer prendra un peu de CPU et de mémoire. –

2

Ou utilisez simplement Numerical Python si vous voulez faire des choses mathématiques sur la matrice aussi (comme la multiplication, ...). Si elles utilisent la commande principale de rangée pour la disposition de matrice en mémoire je ne peux pas vous dire mais il est couvert dans leur documentation

+0

Vous pouvez corriger l'ordre interne en numpy. Par exemple, la fonction vide pour créer un tableau non peuplé a l'argument order ('C' vs 'F' pour C vs. Fortran). La disposition par défaut est l'ordre des lignes. –

+0

Avec l'analyse matricielle, le problème ne se limite pas à la création de matrices, mais réside dans l'arithmétique matricielle et les interactions. Utilisez numpy/scipy, ça en vaut la peine. – dassouki

6

Je pense que vous devrez employer numpy pour tenir une matrice si grande efficacement, pas simplement le calcul. Vous avez ~ 5e6 éléments de 4/8 octets signifie déjà 20/40 Mb en C pur, plusieurs fois de cela en python sans une structure de données efficace (une liste de lignes, chaque ligne une liste).

Maintenant, concernant votre question:

import numpy as np 
a = np.empty((1234, 5678), dtype=np.int) 
a[:] = np.linspace(1, 5678, 5678) 

Vous créez un tableau de la taille requise, avec le type int (je suppose que vous savez que vous voulez 4 octets entier, ce qui est ce que np.int vous donnera sur la plupart des plates-formes). La troisième ligne utilise la diffusion de sorte que chaque ligne (a [0], a [1], ... a [1233]) se voit affecter les valeurs de la ligne np.linspace (ce qui vous donne un tableau de [1, .. ..., 5678]). Si vous souhaitez que le stockage F, qui est la colonne principale:

a = np.empty((1234, 4567), dtype=np.int, order='F') 
... 

La matrice une volonté ne prend qu'une petite quantité de mémoire plus qu'un tableau en C, et pour le calcul au moins, les capacités d'indexation des tableaux sont beaucoup mieux que les listes Python. Un nitpick: numeric est le nom de l'ancien paquet numérique pour python - le nom recommandé est numpy.

Questions connexes