2010-05-05 10 views
4

J'ai des données représentées dans une matrice 1300x1341. Je voudrais diviser cette matrice en plusieurs parties (par exemple 9) afin que je puisse boucler et les traiter. Les données doivent rester ordonnées dans le sens où x [0,1] reste en dessous (ou plus haut si vous voulez) x [0,0] et en plus de x [1,1].
Tout comme si vous aviez imagé les données, vous pourriez dessiner 2 lignes verticales et 2 horizontales sur l'image pour illustrer les 9 parties.Python/Numpy: tableau de division

Si je numpys remodeler (par exemple. Matrix.reshape (9.260.745) ou toute autre combinaison de 9.260.745), il ne donne pas la structure requise car l'ordre mentionné ci-dessus est perdu ...

Ai-je mal compris la méthode remodeler ou peut-il être fait de cette façon?

Quelle autre manière pythonique/numpy est là pour faire ceci?

Répondre

4

On dirait que vous devez utiliser numpy.split() qui a sa documentation here ... ou peut-être son frère numpy.array_split()here. Ils sont pour diviser un tableau en sous-sections égales sans réarrangeant les nombres comme Reshape fait,

Je n'ai pas testé, mais quelque chose comme:

numpy.array_split(numpy.zeros((1300,1341)), 9) 

devrait faire l'affaire.

+0

Cela semble faire ce que je veux.Merci – BandGap

2

Reshape, pour citer son docs,

donne une nouvelle forme à un tableau sans changer ses données.

En d'autres termes, il ne se déplace pas du tout les données du tableau - il affecte juste de tableau dimension. Vous, d'autre part, semblent exiger slicing; pour citer à nouveau:

Il est possible de couper et foulée tableaux pour extraire des tableaux de même nombre de dimensions, mais de différentes tailles que l'original. Le tranchage et striding fonctionne exactement de la même manière que pour les listes et les tuples , sauf qu'ils peuvent être appliqués aux dimensions multiples .

Ainsi, par exemple thearray[0:260, 0:745] est la « partie gauche supérieure, thearray[260:520, 0:745] la partie supérieure gauche du centre, et ainsi de suite. Vous pourriez avoir des références aux différentes parties dans une liste (ou dict avec les touches appropriées) à les traiter séparément.

+0

Trancher est bien sûr toujours une option mais j'ai eu un sentiment numpy pourrait avoir quelque chose à bord à cet effet ... – BandGap