Как я могу определить многомерные массивы в Python?

В MATLAB есть простой способ определения многомерных массивов, например

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

где первые два индекса соответственно для строк и столбцов i-й матрицы (или страницы, см. рисунок ниже), хранящихся в A;

введите описание изображения здесь

Кто-нибудь знает, как я могу определить ту же структуру в Python?

3 ответа

Решение

С индексацией NumPy похож на 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.]

Чистый Python способ сделать это - использовать список списков (или в этом случае список списков списков). Вы можете инициализировать его с пониманием списка. Например:

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

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

Или, если вы хотите заполнить тензор кортежами, как на рисунке:

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

Это инициализирует d Икс w Икс h "матрица" заполнена нулями.

Вы можете получить доступ к (i,j,k)-ый элемент с:

data[i][j][k]

Тем не менее, есть такие библиотеки, как numpy, которые поддерживают векторы, матрицы, тензоры и т. Д.

Если вы хотите использовать NumPy, есть много способов. Одним из способов будет инициализация со всеми нулями или, как в вашем обновленном примере, вы также можете заполнить диапазон, а затем 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)
Другие вопросы по тегам