NumPy结构化数组具有命名列:
import numpy as npa = range(100)A = np.array(list(zip(*[iter(a)] * 2)), dtype=[('C1', 'int32'),('C2', 'int64')])print(A.dtype)[('C1', '<i4'), ('C2', '<i8')]您可以按以下名称访问列:
print(A['C1'])# [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48# 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98]
请注意,使用
np.arraywith
zip会导致NumPy从元组的临时列表构建数组。Python元组列表比等效的NumPy数组使用更多的内存。因此,如果数组很大,则可能不希望使用
zip。
相反,给定NumPy数组
A,您可以用于
ravel()制作
A一维数组,然后用于
view将其转换为结构化数组,然后用于
astype将列转换为所需的类型:
a = range(100)A = np.array(a).reshape( len(a)//2, 2)A = A.ravel().view([('col1','i8'),('col2','i8'),]).astype([('col1','i4'),('col2','i8'),])print(A[:5])# array([(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)], # dtype=[('col1', '<i4'), ('col2', '<i8')])print(A.dtype)# dtype([('col1', '<i4'), ('col2', '<i8')])


