Тип данных np.unit8 в Python — это 8-битный целочисленный тип без знака, используемый в библиотеке NumPy и способный представлять значения от 0 до 255. Он очень эффективен для приложений, чувствительных к памяти, благодаря своему компактному размеру.

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

NumPy, фундаментальный пакет для научных вычислений на Python, предлагает множество типов данных для разных типов числовых данных. Среди них — numpy.uint8, беззнаковый 8-битный целочисленный тип.

Содержание

Характеристики

  1. Целое число без знака: numpy.uint8 представляет 8-битное целое число без знака. Отсутствие знака означает, что он может представлять только неотрицательные значения.
  2. Диапазон значений: он может представлять значения от 0 до 255. Это связано с тем, что 8 бит могут представлять 28 значений, а без отрицательных чисел этот диапазон составляет от 0 до 255.
  3. Эффективность памяти: используя всего 8 бит, это компактный тип данных, что позволяет эффективно использовать память для хранения больших массивов данных, значения которых попадают в его диапазон.

Тип

  1. Обработка изображений: он широко используется при обработке изображений, поскольку изображения часто представляются в виде массивов со значениями пикселей обычно в диапазоне от 0(черный) до 255(белый) для изображений в оттенках серого.
  2. Хранение и обработка данных: в сценариях, где известно, что значения данных находятся в диапазоне 0–255, использование np.unit8 в Python может сэкономить память, что особенно полезно для обработки больших наборов данных.

Сравнение с другими типами данных NumPy

  1. По сравнению с numpy.int8: тип np.int8 представляет собой 8-битное целое число со знаком в диапазоне от -128 до 127. np.unit8 в Python часто предпочтительнее, когда отрицательные значения не требуются, поскольку он предлагает более широкий диапазон положительных значений.
  2. Против больших целочисленных типов: более крупные типы, такие как numpy.int16, numpy.int32 и т. д., предлагают более широкие диапазоны, но за счет увеличения использования памяти. np.unit8 в Python предпочтительнее, если его диапазон достаточен и эффективность использования памяти является приоритетом.

Давайте посмотрим несколько примеров того, как numpy.uint8 используется в Python.

Пример 1. Создание массива Python uint8 в NumPy

import numpy as np
array_uint8 = np.array([0, 128, 255], dtype=np.uint8)
print(array_uint8)
print(type(array_uint8[1]))

Вывод: здесь мы используем параметр dtype в функции array() для присвоения значений этого типа данных.

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

[  0 128 255]

Пример 1. Создание массива Python uint8 в NumPy

Пример 2: тип данных, используемый при обработке изображений

from PIL import Image
import numpy as np

# Loading an image and converting it to a numpy array
img = Image.open("C:/Users/kumar/OneDrive/Desktop/Pythonguides_image.jpg")
img_array = np.array(img, dtype=np.uint8)

print(img_array)
print(type(img_array[1]))

Вывод: реализация кода приведена ниже:

[[[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

...

 [[251 251 251]
  [251 251 251]
  [251 251 251]
  ...
  [251 251 251]
  [251 251 251]
  [251 251 251]]

 [[251 251 251]
  [251 251 251]
  [251 251 251]
  ...
  [251 251 251]
  [251 251 251]
  [251 251 251]]

 [[251 251 251]
  [251 251 251]
  [251 251 251]
  ...
  [251 251 251]
  [251 251 251]
  [251 251 251]]]

Пример 3: для демонстрации эффективности использования памяти

import numpy as np

large_array_uint8 = np.zeros((1000, 1000), dtype=np.uint8)
large_array_int32 = np.zeros((1000, 1000), dtype=np.int32)

print(large_array_uint8.nbytes)
print(large_array_int32.nbytes)

Вывод:

1000000
4000000

Пример 3: для демонстрации эффективности использования памяти

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