Понимание типов данных NumPy

NumPyBeginner
Практиковаться сейчас

Введение

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

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

Проверка типа данных массива

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

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

Сначала откройте файл main.py из файлового менеджера слева. Мы добавим код для создания простого массива, а затем выведем его тип данных.

Добавьте следующий код в main.py:

## Create a NumPy array from a list of integers
## np.array() converts a Python list into a NumPy array
arr_int = np.array([1, 2, 3, 4, 5])

## Print the data type of the array
## .dtype shows the data type of array elements
print("Data type of arr_int:", arr_int.dtype)

Теперь сохраните файл и запустите его из терминала, чтобы увидеть вывод.

python main.py

Вы увидите тип данных массива, выведенный в консоль. Конкретный целочисленный тип (например, int64) зависит от архитектуры вашей системы.

Data type of arr_int: int64

Это подтверждает, что NumPy правильно определил элементы как целые числа.

Указание типа данных при создании

Хотя автоматическое определение типов NumPy полезно, часто требуется явно задать тип данных массива для повышения эффективности использования памяти или для соответствия требованиям конкретных вычислений. Это можно сделать с помощью аргумента dtype при создании массива.

Различные типы данных используют разное количество памяти:

  • int32 использует 4 байта на элемент
  • int64 использует 8 байт на элемент
  • float32 использует 4 байта на элемент
  • float64 использует 8 байт на элемент

Для больших массивов выбор правильного типа данных может сэкономить значительный объем памяти и потенциально улучшить производительность.

Давайте создадим массив и укажем его тип данных как 32-битное число с плавающей запятой. Измените файл main.py, добавив следующий код. Вы можете закомментировать или удалить код из предыдущего шага.

## Create an array and specify the data type as float32
## The dtype parameter tells NumPy to store each number as a 32-bit float
arr_float = np.array([1.0, 2.5, 3.8], dtype=np.float32)

## Print the data type and the array
print("Data type of arr_float:", arr_float.dtype)
print("Array arr_float:", arr_float)

Сохраните файл и запустите его снова.

python main.py

Вывод покажет, что массив был создан с указанным вами типом данных float32.

Data type of arr_float: float32
Array arr_float: [1.  2.5 3.8]

Вы можете использовать различные строковые представления типов данных или объекты NumPy, такие как 'f4' для float32, 'i8' для int64 или np.bool_ для булевых значений.

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

После создания массива может потребоваться преобразовать его тип данных. Для этой цели используется метод .astype(). Этот метод не изменяет исходный массив, а возвращает новый массив с указанным типом данных.

Преобразование типов полезно, когда вам нужно:

  • Выполнять операции, требующие определенного типа данных
  • Уменьшить использование памяти, преобразовав к более мелким типам
  • Подготовить данные для функций, ожидающих определенные типы

Давайте создадим целочисленный массив, а затем преобразуем его в массив с плавающей запятой. Обновите файл main.py следующим кодом:

## Create an integer array
## np.arange(5) creates an array with numbers from 0 to 4 (5 elements total)
original_arr = np.arange(5)
print("Original array:", original_arr)
print("Original dtype:", original_arr.dtype)

## Convert the array to float64
## .astype() creates a new array with the specified data type
converted_arr = original_arr.astype(np.float64)
print("Converted array:", converted_arr)
print("Converted dtype:", converted_arr.dtype)

Сохраните файл и выполните его.

python main.py

Вывод демонстрирует, что original_arr остается целочисленным массивом, в то время как converted_arr является новым массивом с типом данных float64.

Original array: [0 1 2 3 4]
Original dtype: int64
Converted array: [0. 1. 2. 3. 4.]
Converted dtype: float64

Это безопасный способ выполнения преобразований типов без потери исходных данных.

Работа с другими типами данных

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

Булевы массивы особенно полезны для:

  • Фильтрации данных (выбора элементов, удовлетворяющих определенным условиям)
  • Логических операций
  • Маскирования массивов

Например, вы можете создать массив булевых значений, представляющих условия Истина/Ложь.

Давайте создадим булев массив. Обновите файл main.py:

## Create a boolean array
## np.bool_ is NumPy's boolean data type (stores True/False values)
arr_bool = np.array([True, False, True], dtype=np.bool_)

print("Boolean array:", arr_bool)
print("Boolean array dtype:", arr_bool.dtype)

Сохраните и запустите скрипт.

python main.py

Вывод покажет булев массив и соответствующий ему тип данных.

Boolean array: [ True False  True]
Boolean array dtype: bool

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

Резюме

В этой лабораторной работе вы изучили основы работы с типами данных в NumPy. Теперь вы понимаете:

  • Что такое массивы NumPy и почему они эффективнее списков Python
  • Как создавать массивы с помощью np.array() и np.arange()
  • Как проверить тип данных массива с помощью атрибута .dtype
  • Как указать тип данных при создании массива с помощью параметра dtype
  • Как преобразовать тип данных массива с помощью метода .astype()
  • Влияние различных типов данных на использование памяти (int32, int64, float32, float64)
  • Как работать с булевыми массивами для фильтрации и логических операций

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