Атрибут fields
Атрибут fields класса dtype возвращает словарь,
содержащий информацию о полях составного типа данных.
Ключами словаря являются имена полей, а значениями - кортежи,
содержащие описание каждого поля.
Синтаксис
dtype.fields
Возвращаемый словарь имеет следующую структуру:
- Ключ - имя поля (строка)
-
Значение - кортеж из двух элементов:
(dtype, offset), гдеdtype- тип данных поля, аoffset- смещение в байтах от начала структуры
Пример
Давайте создадим составной тип данных с двумя полями
и выведем его атрибут fields:
import numpy as np
dt = np.dtype([('x', np.int32), ('y', np.float64)])
res = dt.fields
print(res)
Результат выполнения кода:
{
'x': (dtype('int32'), 0),
'y': (dtype('float64'), 4)
}
Из вывода видно, что поле x имеет тип int32
и находится по смещению 0 байт, а поле y имеет
тип float64 и смещено на 4 байта.
Пример
Используем атрибут fields для получения типа
конкретного поля по его имени:
import numpy as np
dt = np.dtype([('id', np.int64), ('value', np.float32)])
field_info = dt.fields['value']
print(field_info)
Результат выполнения кода:
(dtype('float32'), 8)
Как видим, поле value имеет тип float32
и смещение 8 байт относительно начала структуры.
Пример
Проверим, доступен ли атрибут fields для простых
типов данных, и увидим, что он возвращает None:
import numpy as np
dt = np.dtype(np.int32)
res = dt.fields
print(res)
Результат выполнения кода:
None
Для стандартных скалярных типов данных атрибут
fields всегда возвращает None.
Пример
Создадим массив со структурой данных и используем
fields для анализа полей:
import numpy as np
dt = np.dtype([
('name', np.str_, 16),
('age', np.int32),
('score', np.float64)
])
arr = np.array([('Alice', 25, 95.5), ('Bob', 30, 87.3)], dtype=dt)
field_names = list(arr.dtype.fields.keys())
print(field_names)
Результат выполнения кода:
['name', 'age', 'score']
С помощью атрибута fields мы получили список
всех имен полей составного типа данных.