Как понять порядок результата `numpy.narray.view`, если я использую его для просмотра 2` np.uint8` как 1 `np.uint16`? - PullRequest
0 голосов
/ 20 мая 2018

Допустим, у меня есть массив a с двумя элементами типа данных np.uint8.И я хотел бы просмотреть этот массив, как если бы его содержимое было типа данных np.uint16.Поэтому я использую метод numpy.narray.view:

import numpy as np

a = np.array([1, 2], dtype=np.uint8)
print(a.view(np.uint16))

В результате получается [513].Тем не менее, я ожидал, что это будет:

a is [               1,               2 ]
       0 0 0 0 0 0 0 1, 0 0 0 0 0 0 1 0

                    _______________ _______________
So a.view should be 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 (binary 1 then 2)
                                                258

Почему все наоборот?

                         _______________ _______________
a.view really results in 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 (binary 2 then 1)
                                                     513

Почему порядок так?

1 Ответ

0 голосов
/ 23 мая 2018

Благодаря комментариям @WarrenWeckesser и @hpaulj я понял это:

Две части numpy.uint16, которые можно интерпретировать как две numpy.uint8, не обязательно лежат "последовательно" впамять.То, как байты хранятся в памяти, зависит от порядкового номера платформы.Для меня «последовательное» хранение байтов кажется интуитивно понятным, но оно справедливо только для платформ с прямым порядком байтов.

См. Статью в Википедии для получения дополнительной информации о порядке байтов: https://en.wikipedia.org/wiki/Endianness

Моя платформапорядок байтовПоэтому, если я позвоню a.view(np.uint16), это будет эквивалентно a.view("<u2").Последняя часть numpy.uint16 приводит к первому numpy.uint8 и наоборот, что приводит к 513.Если я позвоню a.view(">u2"), то получу последовательный порядок для двух numpy.uint8, и, следовательно, 258 в результате.

> означает big-endian, < означает little-endian иu2 делает его 16-битным целым числом без знака.

Для дальнейшего чтения на SciPy.org есть две подходящие статьи ...

...