Структурированные массивы NumPy имеют именованные столбцы:
import numpy as np
a=range(100)
A = np.array(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.array
с zip
вызывает NumPyпостроить массив из временного списка кортежей.Списки кортежей Python используют намного больше памяти, чем эквивалентные массивы NumPy.Поэтому, если ваш массив очень большой, вы можете не использовать zip
.
Вместо этого, учитывая массив NumPy A
, вы можете использовать ravel()
, чтобы сделать A
массивом 1D, а затемиспользуйте 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')])