Как определить многомерные массивы в 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.]
A чистом 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
x w
x h
"матрица" заполняется нулями.
вы можете получить доступ к (i,j,k)
-й элемент с:
data[i][j][k]
тем не менее есть библиотеки, такие как включает в себя которые имеют поддержку векторов, матриц, тензоров и т. д.
Если вы используете включает в себя то есть много способов. Один из способов-инициализировать все нули или, как в вашем обновленном примере, вы также можете заполнить диапазон, а затем 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)