Dire que j'ai initialisé un tableau en 3D comme:valeurs assignant à des indices en indice spécifiques dans le réseau de python 3D renvoie des erreurs
arr_3d = np.zeros((100, 100, 100))
Maintenant, je veux changer les éléments à indices en indice (i, j, k)
de arr_3d
à une valeur (par exemple 1), où i, j, k
sont la liste (ou tableau) d'indices avec les tailles 100, 100, 40
, respectivement, le long des trois axes. J'ai essayé arr_3d[i, j, k] = 1
, mais il jette une erreur. J'ai essayé de convertir les indices d'indice en indices linéaires par np.ravel_multi_index()
, mais il semble qu'il ne peut pas convertir les indices d'indice d'un tableau 3D.
Le problème ci-dessus est facile à résoudre dans Matlab, où arr_3d(i, j, k) = 1
fonctionne.
La valeur par défaut pour MATLAB est d'indexer les tableaux sous forme de blocs, dans ce cas un bloc (100,100,40). L'équivalent numpy le plus proche est 'arr_3d [np.ix_ (i, j, k)]', où 'np.ix_' convertit les 3 tableaux plats en tableaux 3d. Exécutez cette expression 'np.ix_' seule (pour les petits échantillons) pour voir ce qu'elle fait. Plus d'informations sur l'indexation numérique à l'adresse https://docs.scipy.org/doc/numpy/reference/arrays.indexing.html#integer-array-indexing – hpaulj
L'indexation numpy '[i, j, k]' ressemble plus à MATLABs linéaire indexation avec 'idx = sub2ind (taille (A), i, j, k)'. – hpaulj
@hpaulj: Merci, Paul. Cela semble fonctionner, mais l'ordre n'est pas maintenu. Par exemple, 'a = np.zeros ((4, 4, 4))', et 'a [np.ix _ ([0,1,2,3], [0,1,2,3], [0 , 1])] = 1' renvoie un tableau dont les éléments de 2ème et 3ème dimension semblent avoir été permutés. – user11