調用ubyte文件用什么函數?
#需要導入的庫,struct是一個很常用的二進制解析庫
import numpy as np
import struct
def decode_idx3_ubyte(idx3_ubyte_file):#此函數用來解析idx3文件,idx3_ubyte_filec指定圖像文件路徑
#讀取二進制數據
bin_data=open(idx3_ubyte_file,'rb').read()
#解析文件頭信息,依次為魔數、圖片數量、每張圖片高、每張圖片寬
offest=0
fmt_header='>iiii' magic_number,num_images,num_rows,num_cols=struct.unpack_from(fmt_header,bin_data,offest)
print('魔數:%d,圖片數量:%d,圖片大小:%d%d' % (magic_number,num_images,num_rows,num_cols))
#解析數據集
image_size=num_rows*num_cols
offest += struct.calcsize(fmt_header)
fmt_image='>'+str(image_size)+'B'
images=np.empty((num_images,num_rows,num_cols))
for i in range(num_images):
if (i+1)%10000==0:
print('已解析%d'%(i+1)+'張') images[i]=np.array(struct.unpack_from(fmt_image,bin_data,offest)).reshape((num_rows,num_cols))
offest+=struct.calcsize(fmt_image)
return images
'''images是一個三維數組,images[i][a][b]表示第i張圖片的倒數第a行,b列的像素'''
def decode_idx1_ubyte(idx1_ubyte_file):#解析idx1文件函數,idx1_ubyte_file指定標簽文件路徑
#讀取二進制數據
bin_data=open(idx1_ubyte_file,'rb').read()
#解析文件頭信息,依次為魔數和標簽數
offest=0
fmt_header='>ii'
magic_number,num_images=struct.unpack_from(fmt_header,bin_data,offest)
print('魔數:%d,圖片數量:%d張' % (magic_number,num_images))
#解析數據集
offest+=struct.calcsize(fmt_header)
fmt_image='>B'
labels=np.empty(num_images)
for i in range(num_images):
if (i+1)%10000==0:
print('已解析:%d'%(i+1)+'張')
labels[i]=struct.unpack_from(fmt_image,bin_data,offest)[0]
offest+=struct.calcsize(fmt_image)
print(labels[0])
return labels
'''labels是一個一維數組,每個元素都一一對應images[i]'''