Попытка преобразовать файл .npy (float64) в uint8 или uint16 - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь отобразить массив 3D Numpy с помощью VTK (python 3), но ему нужен тип uint8 или uint16.

Я не знаю, как это сделать, и любая помощь будет принята с благодарностью.

В случае, если я ничего не могу сделать, я просто хочу отобразить свой файл .npy с помощью VTK. Любые предложения будут высоко оценены.

1 Ответ

0 голосов
/ 29 мая 2020

Вы можете использовать функцию numpy .astype (), чтобы изменить тип данных. Вот пример:

>>> arr = np.array([10., 20., 30., 40., 50.]) 
>>> print(arr)
[10. 20. 30. 40. 50.]
>>> print(arr.dtype)
float64
>>> arr = arr.astype('uint16')
>>> print(arr)
[10 20 30 40 50]
>>> print(arr.dtype)
uint16

Чтобы ответить на ваши дальнейшие вопросы, вы хотите нормализовать свои данные при преобразовании float64 в uint8 или uint16. В основном вы хотите сопоставить диапазон данных [min, max] вашего массива с [0, 255] для uint8 или [0, 65535] для uint16. Вы все равно потеряете информацию, но нормализация минимизирует потерю данных.

Вот как вы можете сопоставить float64 с uint8:

dmin = np.min(arr)
dmax = np.max(arr)
drange = dmax-dmin
dscale = 255.0/drange
new_arr = (arr-dmin)*dscale
new_arr_uint8 = new_arr.astype('uint8')

загруженный массив.

...