python 类型错误:%X格式:需要一个整数,而不是numpy,ndarray如何解决?

xzv2uavs  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(166)
from __future__ import print_function
import numpy as np
def tohex(val, nbits):
 return hex((val + (1 <<nbits)) % (1 <<nbits))
array=np.load('C:/Tool/Python_pattern/agilev3_new/inout_pattern_layer52/in_52.npy')
#print(array.shape)
print(array.dtype)

# array[#][Row][Column][Channel] #1 52 52 384
fp = open("in_52.dat", "w")

for ch in range(384):
 data=array[ch]
 #print(data.dtype)
 #print(data)
 print(str("%08X" %(data)))
 
 if data<0:
  data=2**32+data
  #fp.write(str("%08X" %(data)))
  fp.write(str("%08X" %(data)))
 else:
  #fp.write(str("%08X" %(data)))
  fp.write(str("%08X" %(data)))
 fp.write("\n")
fp.close()

下面是我正在使用的代码。我试图在powershell中获取数据文件。但它总是显示错误。
我在powershell中

PS C:\Tool\Python_pattern\agilev3_new\inout_pattern_layer52> python for_bias_patterm_rowachannel_base.py

我来吧

Traceback (most recent call last):
  File "for_bias_patterm_rowachannel_base.py", line 16, in <module>
    print(str("%08X" %(data)))
TypeError: %X format: an integer is required, not numpy.ndarray
qco9c6ql

qco9c6ql1#

您收到的错误消息表明数据变量是一个numpy数组而不是一个整数值。%X格式需要一个整数作为输入,但numpy数组不能直接格式化为整数。
要修复此错误,您可以修改代码以迭代数据数组的每个元素,并将它们分别格式化为整数。下面是应该可以工作的代码的更新版本:

from __future__ import print_function
import numpy as np

def tohex(val, nbits):
    return hex((val + (1 << nbits)) % (1 << nbits))

array = np.load('C:/Tool/Python_pattern/agilev3_new/inout_pattern_layer52/in_52.npy')
#print(array.shape)
print(array.dtype)

# array[#][Row][Column][Channel] #1 52 52 384
fp = open("in_52.dat", "w")

for ch in range(384):
    data = array[ch]
    #print(data.dtype)
    #print(data)
    for element in np.nditer(data):
        formatted_element = str("%08X" % (element))
        if element < 0:
            element = 2 ** 32 + element
            formatted_element = str("%08X" % (element))
        fp.write(formatted_element)
        fp.write("\n")

fp.close()

这段代码应该迭代数据数组的每个元素,并使用%08X格式将它们格式化为整数。如果一个元素是负数,它将向其添加2^32以获得正确的值。

相关问题