3 votes

Insérer un élément et modifier la dimension du tableau

Je veux ajouter des dimensions à un tableau, mais expand_dims ajoute toujours une dimension de taille 1.

Entrée :

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Ce que fait expand_dims :

[[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]]

Ce que je veux :

[[[1, 1], [1, 2], [1, 3]], [[1, 4], [1, 5], [1, 6]], [[1, 7], [1, 8], [1, 9]]]

En gros, je veux remplacer chaque scalaire de la matrice par un vecteur [1, x] où x est le scalaire original.

1voto

Kasramvd Points 32864

Voici une façon d'utiliser la diffusion et np.insert() fonction :

In [32]: a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
In [33]: np.insert(a[:,:,None], 0, 1, 2)                                                                                                                                                                    
Out[33]: 
array([[[1, 1],
        [1, 2],
        [1, 3]],

       [[1, 4],
        [1, 5],
        [1, 6]],

       [[1, 7],
        [1, 8],
        [1, 9]]])

1voto

hpaulj Points 6132

Il existe de nombreuses façons de construire le nouveau tableau.

Vous pourriez initialiser le tableau avec la forme et le remplissage appropriés, et copier les valeurs :

In [402]: arr = np.arange(1,10).reshape(3,3)
In [403]: arr
Out[403]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
In [404]: res = np.ones((3,3,2),int)
In [405]: res[:,:,1] = arr
In [406]: res
Out[406]: 
array([[[1, 1],
        [1, 2],
        [1, 3]],

       [[1, 4],
        [1, 5],
        [1, 6]],

       [[1, 7],
        [1, 8],
        [1, 9]]])

Vous pourriez joindre le tableau avec un tableau de taille similaire de 1. concatenate est la fonction d'assemblage de base :

In [407]: np.concatenate((np.ones((3,3,1),int), arr[:,:,None]), axis=2)
Out[407]: 
array([[[1, 1],
        [1, 2],
        [1, 3]],

       [[1, 4],
        [1, 5],
        [1, 6]],

       [[1, 7],
        [1, 8],
        [1, 9]]])

np.stack((np.ones((3,3),int), arr), axis=2) fait la même chose sous les couvertures. np.dstack ('d' pour profondeur) le fait aussi. Le site insert dans l'autre réponse fait également cela.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X