2010-02-23 6 views
3

droit, peut-être je devrais utiliser les listes Python normales pour cela, mais voilà:Simple question: En numpy comment faites-vous un tableau multidimensionnel de tableaux?

Je veux un 9 par 4 tableau multidimensionnel/matrice (quel que soit vraiment) que je veux stocker des tableaux dans ces tableaux seront. 1 dimensions et de longueur 4096.

Alors, je veux pouvoir aller quelque chose comme

column = 0         #column to insert into 
row = 7          #row to insert into 
storageMatrix[column,row][0] = NEW_VALUE 
storageMatrix[column,row][4092] = NEW_VALUE_2 
etc.. 

J'apprécie que je pourrais faire quelque chose d'un peu ici stupide/inutile, mais il sera plus ALOT plus facile pour moi de l'avoir structuré comme ça dans mon code (comme il y en a beaucoup, et beaucoup d'analyses à faire plus tard).

Merci!

Répondre

8

Notez que pour tirer parti de toute la puissance de numpy , vous seriez beaucoup mieux avec un tableau numpy à 3 dimensions. Décomposer le tableau 3-d dans un tableau de 2-d avec des valeurs 1-d peut compliquer votre code et vous forcer à utiliser des boucles au lieu de fonctions numpy intégrées.

Il peut être utile d'investir le temps de refactoriser votre code pour utiliser les matrices numpy 3-d supérieures.

Cependant, si ce n'est pas une option, puis:

import numpy as np 
storageMatrix=np.empty((4,9),dtype='object') 

En réglant le dtype-'object', nous disons numpy pour permettre à chaque élément de storageMatrix être un objet Python arbitraire.

Maintenant, vous devez initialiser chaque élément du tableau numpy être un tableau numpy 1-d:

storageMatrix[column,row]=np.arange(4096) 

Et vous pouvez accéder aux éléments du tableau comme celui-ci:

storageMatrix[column,row][0] = 1 
storageMatrix[column,row][4092] = 2 
+0

Génial, c'est parfait - et en fait je vais refactoriser mon code pour utiliser des tableaux 3D, il est logique. –

0

Le Tentative NumPy Tutorial dit que vous pouvez déclarer un tableau 2D en utilisant l'opérateur virgule:

x = ones((3,4)) 

et l'index dans un tableau 2D comme ceci:

>>> x[1,2] = 20 
>>> x[1,:]        # x's second row 
array([ 1, 1, 20, 1]) 
>>> x[0] = a       # change first row of x 
>>> x 
array([[10, 20, -7, -3], 
     [ 1, 1, 20, 1], 
     [ 1, 1, 1, 1]]) 
+0

Ok vous » J'ai eu la bonne idée dans la première partie: je ne me suis peut-être pas bien expliqué. Donc, mettre en place les uns ((3,4)) est juste ... maintenant imaginez pour chacun de ces 1 dans le tableau que je veux qu'il y ait un tableau (pour l'amour des arguments, [1,2,3]) ... comment ferais-je cela? –

+0

Je suppose que je pourrais faire un tableau en trois dimensions en réalité, c'est assez déroutant cependant. –

+0

Pas de cos maintenant j'ai besoin d'un 4-D et c'est dommage car la 4ème dimension affecte l'autre 3, et je veux seulement que cela affecte la 3ème dimension :( –