Как создать тип данных массива в numpy, используя np.dtype или что-то подобное? - PullRequest
0 голосов
/ 07 мая 2019

, поэтому у меня есть 4D ndarray, где каждый элемент представляет собой массив размером 8x8 с типом данных np.int8.Я хочу использовать tobytes() для преобразования его в цепочку битов, а затем frombuffer() для преобразования его в исходное состояние.Как я могу создать тип данных dt такой, что np.frombuffer(bits, dtype=dt) возвращает мне мой оригинальный ndarray после его изменения?Следуя документации здесь

https://docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html#numpy.dtype

Я пробовал множество вещей, таких как dt = np.dtype([('block', np.int8, (8x8))]), но пока ничего не получалось.

1 Ответ

0 голосов
/ 08 мая 2019

Предполагая, что ваш массив действительно является массивом 6D, где каждый элемент является np.int8, вы можете сделать это следующим образом:

arr = np.random.randint(-100, 100, (2, 3, 2, 3, 8, 8)).astype(np.int8)
print(arr.shape)
print(arr.dtype)
arr_bytes = arr.tobytes()
arr_reborn = np.frombuffer(arr_bytes, dtype=np.int8).reshape(arr.shape)
print(np.all(arr == arr_reborn))

print

>>> (2, 3, 2, 3, 8, 8)
>>> int8
>>> True
...