Python dtype高级复合类型

时间:2019-02-25 16:49:24

标签: python-3.x numpy types numpy-ndarray

我目前正在关注一个教程,以向我展示如何创建一些高级组件类型。 我真的无法理解作者的示例,这里是:

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 :(得分:0)

这种类型的数组称为结构化数组

它们包含结构而不是单个元素。

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