In [246]: a = np.full(2, np.nan, dtype='u4,S10')
Посмотрите на полученный массив.Обратите внимание, что ()
делает 2 записи.Также обратите внимание, что np.nan
(число с плавающей точкой) было преобразовано в другие значения в соответствии с указанным типом d (например, строка 'nan'):
In [247]: a
Out[247]: array([(0, b'nan'), (0, b'nan')], dtype=[('f0', '<u4'), ('f1', 'S10')])
Назначение 1 - изменение обоих элементов 1-й записи.Снова обратите внимание на строковое назначение:
In [248]: a[0] = 1
In [249]: a
Out[249]: array([(1, b'1'), (0, b'nan')], dtype=[('f0', '<u4'), ('f1', 'S10')])
Доступ по имени поля:
In [250]: a['f0']
Out[250]: array([1, 0], dtype=uint32)
In [251]: a['f1']
Out[251]: array([b'1', b'nan'], dtype='|S10')
Изменение элемента строкового поля:
In [252]: a['f1'][1] = b'abc'
In [253]: a
Out[253]: array([(1, b'1'), (0, b'abc')], dtype=[('f0', '<u4'), ('f1', 'S10')])
Изменение обоих элементовзаписи - с кортежем:
In [254]: a[0] = (23, b'foobar')
In [255]: a
Out[255]:
array([(23, b'foobar'), ( 0, b'abc')],
dtype=[('f0', '<u4'), ('f1', 'S10')])
Инициализация структурированного массива со списком кортежей:
In [256]: b = np.array([(2,b'xxx'),(34,b'xyz')], dtype=a.dtype)
In [257]: b
Out[257]: array([( 2, b'xxx'), (34, b'xyz')], dtype=[('f0', '<u4'), ('f1', 'S10')])
Все это задокументировано:
https://docs.scipy.org/doc/numpy/user/basics.rec.html#assigning-data-to-a-structured-array