0
votes

Trancher à l'aide de tableaux / indices

J'essaie d'accéder itérale à une matrice numpue en utilisant des indices et des tableaux. L'exemple suivant résume presque beaucoup mon problème: XXX PRE>

Si les choses fonctionnaient comme je pense, le code imprimerait 4 tableaux distincts: P>

Traceback (most recent call last):

  File "<ipython-input-600-50905b8b5c4d>", line 5, in <module>
    print(x[:,nspace(it)])

TypeError: 'numpy.ndarray' object is not callable


3 commentaires

"Mais je reçois une erreur": Il est toujours bon de montrer l'erreur réelle dans votre question (y compris la traçabilité complète). Ici, cela peut sembler évident, mais sinon, l'erreur peut être immensément utile.


Ce serait beaucoup d'aide si vous postez la trace de la pile pour des erreurs que vous rencontrez. Je suppose qu'une exception indexerror a été lancée, mais c'est juste une spéculation sans trace de pile


Vous passez beaucoup de temps à ajouter des modifications et à ne pas examiner les deux réponses de fonctionnement qui ont déjà résolu le problème avant de les avoir postés (qui n'invalinent ni l'approche)


3 Réponses :


0
votes

Vous obtenez l'erreur, car vous devez avoir des supports carrés pour l'accès des éléments sur la dernière ligne.

import numpy as np

x = np.arange(12)
x.shape = (3,2,2)
nspace = np.array([[0,0], [0,1], [1,0], [1,1]])

y = x.flatten()

for i in range(x.size//x.shape[0]):
    print y[i::4]


2 commentaires

... Avez-vous couru ceci?


Oui. Je sais que cela donne un mauvais résultat, je voulais seulement signaler la cause de l'erreur dans le code d'origine.



0
votes

Vous devez fournir le premier et le deuxième index et utiliser des supports [] code> au lieu de () code> pour accéder aux éléments de tableau.

x = np.arange(12).reshape(3,2,2)


0 commentaires

1
votes

Vous n'avez pas besoin d'utiliser le pour code> boucle. Utilisez Remodape code> et transpose code>.

for row in x.reshape(3, 4).T:
    print(row)


8 commentaires

Trois oiseaux tués avec un seul coup;)


@Bazingaa ouais et maintenant je réfléchis à votre réponse parce que je pourrais être trop compliqué?


Hors de respect, je n'ai pas osé dire une chose sur votre réponse. Mais oui, ça avait l'air un peu trop condensé, bien que parfaitement bien :)


@Bazingaa Je ne suis pas si préoccupé par la chaîne des opérations - c'est une programmation de tableau après tout :) Mais j'ai une étape inutile? Je pense que le Ravel () est nécessaire mais une partie de moi pense qu'il y a une route plus courte.


x.Reshape (3, 4) .t fonctionne aussi. Ravel n'est pas nécessaire dans ce cas


@Bazingaa Duh (moi) de l'OFC. Le remodèle était la seule chose que je ne pensais pas correctement. Merci :)


Le problème est que je dois attribuer la sortie d'une fonction à la matrice dans chaque itération de la boucle. ne fonctionnerait pas. J'ai changé d'exemple en conséquence.


@ Franciscoandrés alors itération par le nouveau tableau créé