5 votes

Existe-t-il une fonction np.arange pour la matrice ?

J'essaie de trouver un moyen de créer un tableau numpy comme np.arange(start,stop,step) mais qui me permette de donner au tableau une forme 2D choisie, par exemple la ligne du tableau sera les éléments de 'start' à 'stop' et les colonnes seront la répétition des éléments de cette ligne. parce que faire cela n'est pas optimal ;

import numpy as np
x=np.array([0,0,0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,5]).reshape(6,3)

6voto

Mark Setchell Points 11698

En raison de la diffusion, si vous ajoutez votre ligne (rouge dans le diagramme) à une colonne (bleue dans le diagramme) de zéros, vous obtiendrez également ce que vous voulez :

np.arange(0, 6) + np.zeros((3,1))

Résultat

 ([[0., 1., 2., 3., 4., 5.],
   [0., 1., 2., 3., 4., 5.],
   [0., 1., 2., 3., 4., 5.]])

enter image description here

Avec un peu de chance, vous pouvez voir que la diffusion remplit les tirets à l'intérieur des tableaux en répétant ce avec quoi vous avez commencé, pour remplir le tableau. M rangs et N colonnes pour devenir 2 MxN qui sont ensuite additionnés.


Si vous voulez que votre gradient aille de haut en bas plutôt que de gauche à droite, vous devez transformer votre ligne d'incrémentation en une colonne avant d'ajouter une ligne de zéros :

np.arange(6).reshape(-1,1) + np.zeros((1,8))

Résultat

[0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4., 4., 4., 4.],
[5., 5., 5., 5., 5., 5., 5., 5.]

Et si vous voulez apprendre aux enfants leur table de multiplication :-)

np.arange(1,13).reshape(-1,1) * np.arange(1,13)

Résultat

[  1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12],
[  2,   4,   6,   8,  10,  12,  14,  16,  18,  20,  22,  24],
[  3,   6,   9,  12,  15,  18,  21,  24,  27,  30,  33,  36],
[  4,   8,  12,  16,  20,  24,  28,  32,  36,  40,  44,  48],
[  5,  10,  15,  20,  25,  30,  35,  40,  45,  50,  55,  60],
[  6,  12,  18,  24,  30,  36,  42,  48,  54,  60,  66,  72],
[  7,  14,  21,  28,  35,  42,  49,  56,  63,  70,  77,  84],
[  8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  88,  96],
[  9,  18,  27,  36,  45,  54,  63,  72,  81,  90,  99, 108],
[ 10,  20,  30,  40,  50,  60,  70,  80,  90, 100, 110, 120],
[ 11,  22,  33,  44,  55,  66,  77,  88,  99, 110, 121, 132],
[ 12,  24,  36,  48,  60,  72,  84,  96, 108, 120, 132, 144]]

1voto

Chris Mueller Points 2415

Vous pouvez utiliser np.repeat comme suggéré par hpaulj, mais vous devrez ajouter un nouvel axe au tableau créé par np.arange d'abord.

np.repeat(np.arange(0, 6)[np.newaxis,:], 3, axis=0)

# array([[0, 1, 2, 3, 4, 5],
#        [0, 1, 2, 3, 4, 5],
#        [0, 1, 2, 3, 4, 5]])

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