Этот тип массивов известен как структурированные массивы
Они содержат структуры вместо отдельных элементов.
tp = np.dtype([('id', 'i8'), ('mat', 'f8', (3, 3))])
tp определяет тип структуры S, содержащейся в массиве
Numpy переведет это на что-то вроде этого на языке C:
typedef struct S{
int64_t id; //int64 <=> i8
double[3][3] mat; //f8 <=> double
}
X = np.zeros(1, dtype=tp) #X is an array of one element (X.shape == (1,)).
print(X[0]) #Prints the first and last element of the array
print(X['mat']) #this is like selecting the column 'mat'
print(X['mat'][0]) #first element of the column 'mat'; shape=(3,3)
Другой пример:
first = (0, np.zeros((3,3)))
second = (1, np.ones((3,3)) )
Y = np.array([first, second], dtype=tp)
Y['id'] # equivalent to [0, 1]
Y['mat'] # equivalent to [zeros((3,3)), once((3,3))]