我想知道是否有可能在不將陣列加載到記憶體的情況下知道磁盤保存的numpy陣列的形狀。這在.hdf5檔案中是可行的,但不知道在.npz檔案中是否可行。 類似于:
import numpy as np
arr1 = np.range(10000)
arr2 = np.range(10000)
np.savez('tmp/my_arrays.npz', arr1 = arr1, arr2 = arr2)
my_arrays = np.load('tmp/my_arrays.npz')
# this loaded the array into memory[/span]。
my_arrays['arr1'].shape
# 尋找類似的東西
my_arrays.arr1.shape
uj5u.com熱心網友回復:
一個npz-file只是一個陣列的壓縮檔案。它可以用zipfile來打開,比起numpy檔案中的方法,可以只提取標題(shape,fortran_order,dtype)。
示例
import zipfile
import numpy as np
def read_metadata(file_name)。
zip_file=zipfile.ZipFile(file_name, mode='r')
arr_names=zip_file.namelist()
metadata=[]
for arr_name in arr_names:
fp=zip_file.open(arr_name,"r"/span>)
版本=np.lib.format.read_magic(fp)
if version[0]==1。
shape,fortran_order,dtype=np.lib.format.read_array_header_1_0(fp)
elif version[0]==2。
shape,fortran_order,dtype=np.lib.format.read_array_header_2_0(fp)
else:
print("未檢測到檔案格式!")
metadata.append((arr_name,shape,fortran_order,dtype))
fp.close()
zip_file.close()
return metadata
read_metadata('my_arrays.npz')
#[('arr1.npy', (10000,), False, dtype('int32')),
# ('arr2.npy', (10000,), False, dtype('int32'))]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309454.html
標籤:
