Расширенные составные типы Python dtype - PullRequest
0 голосов
/ 25 февраля 2019

В настоящее время я следую Учебному пособию, чтобы показать мне, как создавать некоторые дополнительные типы компонентов.Я не могу понять пример автора, вот он:

tp = np.dtype([('id', 'i8'), ('mat', 'f8', (3, 3))])
X = np.zeros(1, dtype=tp)
print(X[0])
print(X['mat'][0])

Вывод [1]

(0, [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]])
[[ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]

Может кто-нибудь объяснить мне, пожалуйста, с более простыми примерами?Цените свое время!

1 Ответ

0 голосов
/ 25 февраля 2019

Этот тип массивов известен как структурированные массивы

Они содержат структуры вместо отдельных элементов.

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))]
...