我目前正在关注一个教程,以向我展示如何创建一些高级组件类型。 我真的无法理解作者的示例,这里是:
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.]]
有人可以用简单的例子来说明我吗?感谢您的时间!
答案 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))]