试图将.npy文件(float64)转换为uint8或uint16

问题描述 投票:0回答:1

我正在尝试使用VTK(python 3)显示3D numpy数组,但它的类型必须是uint8或uint16。

我不知道该怎么做,我们将不胜感激。

万一,我无能为力,我只想使用VTK显示我的.npy文件。任何建议将不胜感激。

python python-3.x numpy vtk
1个回答
0
投票

您可以使用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]数据范围映射到uint8的[0,255]或uint16的[0,65535]。您仍然会丢失信息,但是规范化可以最大程度地减少数据丢失。

这是将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')

而且,是的,astype函数将在加载的数组上工作。

© www.soinside.com 2019 - 2024. All rights reserved.