Объединение массивов с несколькими типами данных в NumPy
Желание объединить массивы, содержащие разные типы данных, в один массив с соответствующими типами данных в каждом столбце порождает вызов. Распространенный подход с использованием np.concatenate(), к сожалению, преобразует весь массив в строковый тип данных, что приводит к неэффективности использования памяти.
Чтобы преодолеть это ограничение, жизнеспособным решением является использование массивов записей или структурированных массивов.
Массивы записей
Массивы записей позволяют получать доступ к отдельным полям данных через атрибуты. Указав тип данных каждого поля, несколько типов данных можно объединить в один массив:
import numpy as np
a = np.array(['a', 'b', 'c', 'd', 'e'])
b = np.arange(5)
records = np.rec.fromarrays((a, b), names=('keys', 'data'))
print(records)
Вывод:
rec.array([('a', 0), ('b', 1), ('c', 2), ('d', 3), ('e', 4)], dtype=[('keys', '|S1'), ('data', '<i8')])
Структурированные массивы
Структурированные массивы аналогично, предлагая возможность определять тип данных каждого столбца. Однако они не поддерживают доступ к атрибутам, как массивы записей:
arr = np.array([('a', 0), ('b', 1)],
dtype=([('keys', '|S1'), ('data', 'i8')]))
print(arr)
Вывод:
array([('a', 0), ('b', 1)], dtype=[('keys', '|S1'), ('data', '<i8')])
Выбор между записью и структурированным массивом
Выбор между массивами записей и структурированными массивами зависит от индивидуальных случаев использования. Массивы записей обеспечивают удобство доступа к атрибутам, тогда как структурированные массивы могут быть предпочтительными для более сложных структур данных. Оба подхода предлагают удобный способ объединения массивов с разными типами данных в NumPy, обеспечивая гибкость и эффективность манипулирования данными.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3