Атрибут data
Атрибут data объекта ndarray возвращает представление
сырого буфера данных массива в виде объекта memoryview или
указателя на данные в зависимости от контекста. Этот атрибут
позволяет получить прямой доступ к памяти, где хранятся элементы
массива, без копирования.
Значение атрибута зависит от того, является ли массив
«own-data» (владеет своими данными) или представляет собой
представление (view) другого массива. В случае представления
data указывает на те же данные, что и исходный массив.
Синтаксис
arr.data
Пример
Давайте получим объект memoryview для массива чисел:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
res = arr.data
print(res)
Результат выполнения кода:
<memory at 0x7f8b4a2c1b40>
Пример
Атрибут data позволяет получить доступ к сырым байтам
массива через срез memoryview:
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
data_view = arr.data
# Получаем первые 4 байта (один элемент int64)
first_bytes = data_view[:4]
print(first_bytes)
Результат выполнения кода (байты могут отличаться в зависимости от архитектуры и порядка байтов):
b'\n\x00\x00\x00\x00\x00\x00\x00'
Пример
Покажем, что для представления (view) массива data
указывает на те же данные, что и у исходного массива.
Изменим элемент через представление и проверим исходный массив:
import numpy as np
original = np.array([1, 2, 3, 4])
view = original[1:3]
print("original data:", original.data)
print("view data:", view.data)
print("original:", original)
print("view:", view)
# Изменяем элемент через представление
view[0] = 99
print("after change original:", original)
Результат выполнения кода:
original data: <memory at 0x7f8b4a2c1b40>
view data: <memory at 0x7f8b4a2c1bc0>
original: [1 2 3 4]
view: [2 3]
after change original: [1 99 3 4]
Пример
Атрибут data может быть использован для низкоуровневой
работы с байтами, например, для копирования данных в другой
буфер без использования методов NumPy:
import numpy as np
arr = np.array([5, 10, 15, 20])
data_bytes = arr.data.tobytes()
print("Bytes:", data_bytes)
# Восстанавливаем массив из байтов
restored = np.frombuffer(data_bytes, dtype=arr.dtype)
print("Restored:", restored)
Результат выполнения кода:
Bytes: b'\x05\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00'
Restored: [ 5 10 15 20]