web-dev-qa-db-fra.com

Comment définir des tableaux multidimensionnels en python?

Dans MATLAB, il existe un moyen simple de définir des tableaux multidimensionnels, par exemple. 

A(:,:,1) = [1,2,3; 4,5,6];
A(:,:,2) = [7,8,9; 10,11,12];

>> A

 A(:,:,1) =

 1     2     3
 4     5     6


 A(:,:,2) =

 7     8     9
 10    11    12

où les deux premiers indices sont respectivement, pour les lignes et les colonnes de la matrice (ou page, voir image ci-dessous) stockées dans A; 

 enter image description here

Est-ce que quelqu'un sait comment puis-je définir la même structure en python? 

8
S88S

avec NumPy est similaire à MATLAB

 import numpy as np
 A=np.empty((2,3,3))
 A.shape
 #(2L, 3L, 3L)
 A[0,1,2] # element at index 0,1,2
 #0.0
 A[0,:,:] # 3x3 slice at index 0
 #array([[ 0.,  0.,  0.],
 #       [ 0.,  0.,  0.],
 #       [ 0.,  0.,  0.]])
 A[1,1,:] # 1-D array of length 3
 #array([ 0.,  0.,  0.]
10
Sandipan Dey

Une méthode pure Python consiste à utiliser une liste de listes (ou dans ce cas, une liste de listes). Vous pouvez l'initialiser avec la compréhension de liste. Par exemple:

w = 4 #width
h = 3 #height
d = 3 #depth

data = [[[0]*h for _ in range(w)] for _ in range(d)]

Ou si vous voulez remplir le tensor avec des tuples comme sur la figure:

data = [[[(i+1,j+1,k+1) for k in range(h)] for j in range(w)] for i in range(d)]

Ceci initialise une "matrice" d x w x h remplie de zéros.

Vous pouvez alors accéder au (i,j,k)- ème élément avec:

data[i][j][k]

Néanmoins, il existe des bibliothèques comme numpy qui prennent en charge les vecteurs, matrices, tenseurs, etc.

8
Willem Van Onsem

Si vous êtes prêt à utiliser NumPy alors il y a de nombreuses façons . Une solution consiste à initialiser avec tous les zéros ou, comme dans votre exemple mis à jour, vous pouvez également remplir avec une plage, puis reshape .

import numpy as np

a = np.arange(48, dtype=np.int64).reshape((3, 4, 4))
# or 
b = np.zeros((3, 4, 4), dtype=np.int64)
2
roganjosh