Ответ 1
Структурированные массивы 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
одномерным массивом, а затем использовать 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')])