РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
355 of 541 menu

Тип object

Тип данных object в NumPy позволяет создавать массивы, элементами которых могут быть любые Python-объекты: числа, строки, списки, словари, функции и даже другие массивы. Вместо хранения самих объектов, массив хранит ссылки на них, что делает такие массивы гибкими, но менее производительными, чем массивы с числовыми типами. В качестве значения dtype достаточно указать object или np.object_.

Основное применение массивов с типом object - это ситуации, когда необходимо собрать разнородные данные в одной структуре или когда данные не могут быть представлены в виде однородных числовых типов.

Синтаксис

np.array(object, dtype=object)

где:

  • object - входные данные (список, кортеж, другой массив)
  • dtype=object - явное указание типа данных для хранения произвольных объектов

Пример

Создадим массив с элементами разных типов:

import numpy as np arr = np.array([1, "text", 3.14, [1, 2]], dtype=object) print(arr)

Результат выполнения кода:

[1 'text' 3.14 list([1, 2])]

Как видим, массив содержит целое число, строку, число с плавающей точкой и список.

Пример

Создадим массив, содержащий функции и другие массивы:

import numpy as np arr = np.array([ np.sin, np.cos, np.array([1, 2, 3]), {"a": 1, "b": 2} ], dtype=object) print(arr)

Результат выполнения кода:

[<ufunc 'sin'> <ufunc 'cos'> array([1, 2, 3]) {'a': 1, 'b': 2}]

Теперь элементы массива - это функции, другой массив и словарь.

Пример

Изменим элемент массива с типом object:

import numpy as np arr = np.array([10, "hello", 3.14], dtype=object) arr[1] = "world" print(arr)

Результат выполнения кода:

[10 'world' 3.14]

Элемент массива успешно заменен на новую строку.

Пример

Выполним математическую операцию с массивом типа object:

import numpy as np arr = np.array([1, 2, 3, 4], dtype=object) res = arr * 2 print(res)

Результат выполнения кода:

[2 4 6 8]

Операция умножения применяется поэлементно, как и для числовых массивов. Однако если элементы не поддерживают операцию, возникнет ошибка.

Пример

Сравним производительность массивов с типом object и числового типа:

import numpy as np import time size = 1000000 # Array with object type arr_obj = np.array(range(size), dtype=object) start = time.time() res_obj = arr_obj * 2 time_obj = time.time() - start # Array with int64 type arr_int = np.array(range(size), dtype=np.int64) start = time.time() res_int = arr_int * 2 time_int = time.time() - start print(f"Object type time: {time_obj:.4f}s") print(f"Int64 type time: {time_int:.4f}s")

Примерный результат выполнения кода:

"Object type time: 0.0521s" "Int64 type time: 0.0032s"

Как видно, массивы с типом object работают значительно медленнее, поэтому их следует использовать только при необходимости.

Смотрите также

  • тип str,
    который предназначен для хранения строковых данных
  • тип bytes,
    который предназначен для хранения байтовых последовательностей
  • тип void,
    который предназначен для хранения структурированных данных
  • тип bool,
    который предназначен для хранения логических значений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить