NumPy Tutorials

Мастерство работы с типами данных и преобразованиями в NumPy

Spread the love

Содержание

Типы данных NumPy

Мощь NumPy обусловлена его эффективным объектом ndarray (N-мерный массив). В отличие от списков Python, массивы NumPy однородны; все элементы имеют один и тот же тип данных. Эта однородность позволяет проводить оптимизированные векторизованные операции, значительно повышая производительность. NumPy предлагает широкий спектр типов данных, многие из которых дублируют типы в C и Fortran, каждый со своим сокращенным кодом:

Тип данных Описание Код типа NumPy
Целое число Знаковое целое число int8, int16, int32, int64
Беззнаковое целое число Беззнаковое целое число uint8, uint16, uint32, uint64
Число с плавающей точкой Числа с плавающей точкой одинарной и двойной точности float16, float32, float64 (обычно float)
Комплексное число с плавающей точкой Комплексные числа одинарной и двойной точности complex64, complex128 (обычно complex)
Логический Значения True/False bool
Строка Строки фиксированной длины str (или string_ с длиной, например, string_10)
Юникод Юникодные строки фиксированной длины unicode_ (например, unicode_10)
Объект Произвольные объекты Python object

Указание типов данных:

При создании массива можно явно задать тип данных с помощью аргумента dtype:


import numpy as np

arr_int = np.array([1, 2, 3, 4], dtype=np.int32)
print(arr_int.dtype)  # Вывод: int32

arr_float = np.array([1.1, 2.2, 3.3], dtype=np.float64)
print(arr_float.dtype)  # Вывод: float64

arr_mixed = np.array([1, 2.5, 3])  # тип данных будет повышен до float64
print(arr_mixed.dtype)  # Вывод: float64

Тщательный выбор типа данных имеет решающее значение для эффективности использования памяти и производительности. Меньшие типы (например, int32) экономят память, но могут привести к переполнению, если значения превышают их диапазон.

Преобразование типов данных

Преобразование между типами данных является распространенной операцией. NumPy предоставляет несколько методов:

1. Использование astype():

astype() создает копию с новым типом данных:


arr_int = np.array([1, 2, 3], dtype=np.int32)
arr_float = arr_int.astype(np.float64)
print(arr_float)  # Вывод: [1. 2. 3.]
print(arr_float.dtype)  # Вывод: float64

2. Неявное преобразование типов:

NumPy иногда неявно преобразует типы данных во время выполнения операций:


arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2.2, 3.3])
result = arr_int + arr_float
print(result)  # Вывод: [2.1 4.2 6.3]
print(result.dtype)  # Вывод: float64

3. Использование view() (Использовать с осторожностью!):

view() создает новый массив, использующий те же данные, но с другим типом. Изменения в одном представлении влияют на другое. Это эффективно с точки зрения памяти, но опасно:


arr_int = np.array([1, 2, 3], dtype=np.int32)
arr_view = arr_int.view(np.float32)  # Потенциально опасно!
print(arr_view)  # Вывод: [1. 2. 3.]
arr_view[0] = 10.5  # Также изменяет оригинал!
print(arr_int)  # Вывод: [10  2  3]

Понимание типов данных и преобразования в NumPy имеет важное значение для написания эффективного и надежного кода. Выбирайте подходящие типы и используйте view() с осторожностью, учитывая потенциальную потерю данных или неожиданное поведение.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *