Обмен байтами в NumPy

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

  • Режим big-endian:Означает, что старший байт данных хранится по младшему адресу памяти, а младший байт — по старшему адресу памяти. Этот режим хранения чем-то напоминает обработку данных как строки по порядку: адреса увеличиваются от меньшего к большему, а данные размещаются от старшего к младшему; это соответствует нашим привычкам чтения.

  • Режим little-endian:Означает, что старший байт данных хранится по старшему адресу памяти, а младший байт — по младшему адресу памяти. Этот режим хранения эффективно объединяет уровень адреса с весом битов данных: часть по старшему адресу имеет большой вес, а часть по младшему адресу — малый вес.

Например, в языке C переменная int x имеет адрес 0x100, поэтому значение соответствующего ей выражения адреса &x равно 0x100. Четыре байта переменной x будут храниться в позициях памяти 0x100, 0x101, 0x102, 0x103.

numpy.ndarray.byteswap()

Функция numpy.ndarray.byteswap() преобразует порядок байтов каждого элемента в ndarray между big-endian и little-endian.

Пример

import numpy as np a = np.array([1, 256, 8755], dtype = np.int16) print ('Наш массив:') print (a) print ('Вывести данные в памяти в шестнадцатеричном виде:') print (map(hex,a)) # функция byteswap() выполняет замену на месте при передаче True print ('Вызовите функцию byteswap():') print (a.byteswap(True)) print ('Шестнадцатеричный вид:') print (map(hex,a)) # Мы видим, что байты были переставлены местами

Результат вывода:

我们的数组是:
[   1  256 8755]
以十六进制表示内存中的数据:
<map object at 0x104acb400>
调用 byteswap() 函数:
[  256     1 13090]
十六进制形式:
<map object at 0x104acb3c8>
Другие расширения