numpy ndarray dtype 转换失败
numpy ndarray dtype convertion failed
我有一段代码做了一些ndarray转换,我想将最终输出转换为np.int8类型并输出到文件。但是,转换不起作用。这是一段代码:
print("origin dtype:", image[0].dtype)
print(type(image[0]))
image[0] = image[0].astype(np.uint8)
print(image[0])
print("image datatype1:",image[0].dtype)
image[0].tofile(f'{image_name}_{org_h}_{org_w}_{dst_h}_{dst_w}.bin')
print("image datatype2:",image[0].dtype)
这是我得到的:
origin dtype: float32
<class 'numpy.ndarray'>
[[[ 71. 73. 73. ... 167. 170. 173.]
[ 62. 63. 64. ... 164. 168. 170.]
[ 54. 56. 57. ... 157. 163. 165.]
...
[142. 154. 138. ... 115. 91. 111.]
[158. 127. 123. ... 128. 130. 113.]
[133. 114. 106. ... 114. 110. 106.]]]
image datatype1: float32
image datatype2: float32
谁能帮我解决哪里出错了?
二维数组的行不能有不同的数据类型:当您将 uint8
数组分配给 float32
数组的行时,它会被转换为 float32
;例如:
image = np.ones((4, 4), dtype='float32')
print(image[0].dtype)
# float32
image[0] = image[0].astype('uint8')
print(image[0].dtype)
# float32
您的选择是一次转换整个数组的数据类型:
image = image.astype('uint8')
print(image[0].dtype)
# uint8
或者将二维数组转换为一维数组列表,然后每个数组都可以有自己的数据类型:
image = list(image)
print(image[0].dtype)
# float32
image[0] = image[0].astype('uint8')
print(image[0].dtype)
# uint8
我有一段代码做了一些ndarray转换,我想将最终输出转换为np.int8类型并输出到文件。但是,转换不起作用。这是一段代码:
print("origin dtype:", image[0].dtype)
print(type(image[0]))
image[0] = image[0].astype(np.uint8)
print(image[0])
print("image datatype1:",image[0].dtype)
image[0].tofile(f'{image_name}_{org_h}_{org_w}_{dst_h}_{dst_w}.bin')
print("image datatype2:",image[0].dtype)
这是我得到的:
origin dtype: float32
<class 'numpy.ndarray'>
[[[ 71. 73. 73. ... 167. 170. 173.]
[ 62. 63. 64. ... 164. 168. 170.]
[ 54. 56. 57. ... 157. 163. 165.]
...
[142. 154. 138. ... 115. 91. 111.]
[158. 127. 123. ... 128. 130. 113.]
[133. 114. 106. ... 114. 110. 106.]]]
image datatype1: float32
image datatype2: float32
谁能帮我解决哪里出错了?
二维数组的行不能有不同的数据类型:当您将 uint8
数组分配给 float32
数组的行时,它会被转换为 float32
;例如:
image = np.ones((4, 4), dtype='float32')
print(image[0].dtype)
# float32
image[0] = image[0].astype('uint8')
print(image[0].dtype)
# float32
您的选择是一次转换整个数组的数据类型:
image = image.astype('uint8')
print(image[0].dtype)
# uint8
或者将二维数组转换为一维数组列表,然后每个数组都可以有自己的数据类型:
image = list(image)
print(image[0].dtype)
# float32
image[0] = image[0].astype('uint8')
print(image[0].dtype)
# uint8