Рубрики
Без рубрики

Python MemoryView () – Приручить этот странный зверь!

Функция Python MemoryView (ARG) возвращает объект MemoryView данных байтов или аргумента ByTearray. Это обнародует внутренние данные аргумента (буферы), чтобы помочь вам получить доступ к данным без промежуточного копирования. Синтаксис: MemoryView (объект) ArgumentsObjectbytes или bytearray объект, для которого memoryview должен быть возвращен valuememoryviewReturs memoryview объекта. Python MemoryView () – Использование Примеры Узнайте … Python MemoryView () – Ручка этого странного зверя! Подробнее “

Автор оригинала: Chris.

Python MemoryView (ARG) Функция возвращает MemoryView объект данного байта или аргумента Bytearray. Это обнародует внутренние данные аргумента (буферы), чтобы помочь вам получить доступ к данным без промежуточного копирования.

Syntax: memoryview(object)
Аргументы объект BYTES или BYTEARRAY объект, для которого следует возвращать MemoryView
Возвращаемое значение MemoryView. Возвращает MemoryView объекта.

Python MemoryView () – примеры использования

Узнайте пример! В следующем мы собираемся исследовать пример того, почему и как использовать MemoryView () Встроенная функция Отказ

Простое использование MemoryView () это пройти байтовую строку B'hello World ' В качестве аргумента:

>>> view = memoryview(b'hello world')
>>> view

Объект View имеет тип MemoryView. Вы можете получить доступ к однокодам каждой буквы, используя простую индексацию:

>>> view[0]
104

Если вы преобразуете этот первый номер Unicode для персонажа с помощью str () Встроенная функция, вы видите, что это относится к первому персонажу ByteString, то есть 'h' Отказ

>>> chr(view[0])
'h'

Python MemoryView () – Видео

Что такое MemoryView в Python?

Стандартное распределение Python, Cpython , реализован с использованием языка программирования C. Если вы создаете объект BYTES или BYTEARRAY в Python, это будет отображено на объекте Memory-A C, а не объектом Python. По сути, Python – это просто виртуализация на вершине C! Если вы хотите сделать несколько грязных вещей, таких как доступ к объектам в памяти, вы можете использовать MemoryView Объект, который действительно является ссылкой на реальный объект C в памяти – но это похоже на любой другой объект Python! Более конкретно, MemoryView Объект открывает Интерфейс буфера в качестве объекта Python, который затем можно пропустить, как любой другой объект.

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

При использовании байтов или ByTearrays в Python вы часто хотите напрямую получить доступ к данным в памяти. MemoryView () Функция позволяет вам сделать!

Оценка производительности: насколько эффективнее используется MemoryView?

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

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

Эффект может быть очень существенным, как показано на следующей графике оценки:

Эта графика является результатом выполнения следующего кода для оценки производительности на моем Win 10, Intel Core I7, 8 GEN машина:

import time

sizes = range(100000, 600000, 100000)


# Without Memoryview
l1 = []
for n in sizes:
    data = b'x' * n
    start = time.time()
    b = data
    while b:
        b = b[1:]
    stop = time.time()
    print(f'bytes {n} {stop-start}')
    l1.append(stop-start)


# With Memoryview
l2 = []
for n in sizes:
    data = b'x' * n
    start = time.time()
    b = memoryview(data)
    while b:
        b = b[1:]
    stop = time.time()
    print(f'memview {n} {stop-start}')
    l2.append(stop-start)


# Plot everything
import matplotlib.pyplot as plt
plt.plot(l1, 'x-', label='Without Memoryview')
plt.plot(l2, 'o--', label='With Memoryview')
plt.xlabel('Size of Bytearray')
plt.ylabel('Time (s)')
plt.legend()
plt.show()

Численные результаты следующие:

bytes 100000 0.1532435417175293
bytes 200000 0.47913265228271484
bytes 300000 1.1720850467681885
bytes 400000 2.15946888923645
bytes 500000 3.440741777420044
memview 100000 0.0
memview 200000 0.015674114227294922
memview 300000 0.03777813911437988
memview 400000 0.04686594009399414
memview 500000 0.05336737632751465

Вы можете увидеть, что используя MemoryView может привести к более радикальным улучшениям производительности!

Когда следует использовать MemoryView?

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

«MemoryView – это, по сути, обобщенная структура массива Numpy в самом Python (без математики). Это позволяет вам обмениваться памятью между Data-structures (такие вещи, как Pil-изображения, базы данных SQLite, Numpy actions и т. Д.) Без предварительного копирования. Это очень важно для больших наборов данных. С ним вы можете делать такие вещи, как Memory-map-map – очень большой файл, нарежьте кусок этого файла и выполните расчеты на этой части (простой, если вы используете Numpy). “ ( Источник )

Но прежде чем мы будем двигаться дальше, я рад представить вам мою новую книгу Python Python One-listers (Amazon Link).

Если вам нравятся одноклассники, вы будете любить книгу. Это научит вам все, что нужно знать о Одно строка кода Python. Но это тоже Введение в компьютерную науку , наука о данных, машин обучения и алгоритмы. Вселенная в одной строке Python!

Книга была выпущена в 2020 году с помощью книги по программированию мирового класса Nostarch Press (San Francisco).

Ссылка: https://nostarch.com/pythononeliners.

Резюме

Python MemoryView (ARG) Функция возвращает MemoryView объект данного байта или аргумента Bytearray.

Это обнародует внутренние данные аргумента (буферы), чтобы помочь вам получить доступ к данным без промежуточного копирования.

>>> x = memoryview(b'42')
>>> x[0]
52
>>> x[1]
50
>>> x[2]
Traceback (most recent call last):
  File "", line 1, in 
    x[2]
IndexError: index out of bounds on dimension 1

Я надеюсь, что вам понравилось статью! Чтобы улучшить свое образование Python, вы можете присоединиться к популярной академии по электронной почте Free Finxter:

Хотите увеличить свои навыки Python в веселой и легкой потребности? Рассмотрим следующие ресурсы и стать магистральным кодером!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/python-memoryview-function/”