मेरे पास कोड का एक टुकड़ा है जिसने कुछ 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

क्या कोई मेरी मदद कर सकता है कि यह कहां गलत हुआ?

0
Johnzy 8 जिंदा 2021, 10:39
image क्या है?
 – 
hpaulj
8 जिंदा 2021, 10:45

1 उत्तर

सबसे बढ़िया उत्तर

2D सरणी की पंक्तियों में भिन्न प्रकार नहीं हो सकते हैं: जब आप एक 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

आपके विकल्प या तो संपूर्ण सरणी के dtype को एक बार में बदलने के लिए हैं:

image = image.astype('uint8')
print(image[0].dtype)
# uint8

या अपने 2D सरणी को 1D सरणियों की सूची में बदलने के लिए, जिनमें से प्रत्येक का अपना dtype हो सकता है:

image = list(image)
print(image[0].dtype)
# float32

image[0] = image[0].astype('uint8')
print(image[0].dtype)
# uint8
1
jakevdp 12 जिंदा 2021, 10:13