繁体   English   中英

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

[英]Trying to convert a .npy file (float64) to uint8 or uint16

我正在尝试使用 VTK(python 3)显示 3D Numpy 数组,但它需要类型为 uint8 或 uint16。

我不知道该怎么做,任何帮助将不胜感激。

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

您可以使用 numpy.astype() function 更改数据类型。 这是一个例子:

>>> 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 时对数据进行规范化。 基本上,您希望 map 数组的 [min, max] 数据范围为 uint8 的 [0, 255] 或 uint16 的 [0, 65535]。 您仍然会丢失信息,但规范化可以最大限度地减少数据丢失。

以下是将 map 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 function 将在加载的阵列上工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM