在python中将多个numpy文件附加到一个大numpy文件中
我正在尝试放置许多numpy文件以获得一个大的numpy文件,我尝试遵循此链接,我就是这样做的:在python中将多个numpy文件附加到一个大numpy文件中,python,numpy,Python,Numpy,我正在尝试放置许多numpy文件以获得一个大的numpy文件,我尝试遵循此链接,我就是这样做的: import matplotlib.pyplot as plt import numpy as np import os, sys #Read in list of files. You might want to look into os.listdir() path= "/home/user/Desktop/ALLMyTraces.npy/test" #Test folder contai
import matplotlib.pyplot as plt
import numpy as np
import os, sys
#Read in list of files. You might want to look into os.listdir()
path= "/home/user/Desktop/ALLMyTraces.npy/test"
#Test folder contains all my numpy file traces
traces= os.listdir(path)
# Create new File
f = open("/home/user/Desktop/ALLMyTraces.npy", "w")
for j,trace in enumerate(traces):
# Find the path of the file
filepath = os.path.join(path, trace)
# Load file
dataArray= np.load(filepath)
f.write(dataArray)
文件已创建,为了验证我是否具有良好的内容,我使用了以下代码:
import numpy as np
dataArray= np.load(r'/home/user/Desktop/ALLMyTraces.npy')
print(dataArray)
产生此错误的原因是:
dataArray= np.load(r'/home/user/Desktop/ALLMyTraces.npy')
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 401, in load
"Failed to interpret file %s as a pickle" % repr(file))
IOError: Failed to interpret file '/home/user/Desktop/ALLMyTraces.npy' as a pickle
我真的不知道问题出在哪里。任何帮助都将不胜感激。您应该使用或创建pickled.npy或.npz二进制文件。只有那些文件才能被用户读取。由于您正在使用f.write(dataArray)创建文本文件,因此np.load()失败,出现上述错误
这是一个样本
fpath ="path to big file"
npyfilespath ='path to nympy files to be merged '
os.chdir(npyfilespath)
with open(fpath, 'wb') as f_handle:
for npfile in glob.glob("*.npy"):
# Find the path of the file
filepath = os.path.join(path, npfile)
print filepath
# Load file
dataArray= np.load(filepath)
print dataArray
np.save(f_handle,dataArray)
dataArray= np.load(fpath)
print dataArray
刚发现numpy load中有一些非常有趣的东西。它不会一次加载所有附加数组:)。阅读本文了解更多信息
这意味着,如果要读取所有附加的数组,需要多次加载它们
f = open(fpath, 'rb')
dataArray= np.load(f) #loads first array
print dataArray
dataArray= np.load(f) #loads Second array
print dataArray
dataArray= np.load(f) #loads Third array
print dataArray
np.save
写入元块(包含形状和数据类型类型的信息)和数据块np.load
是一种补充,能够读取该格式
dataArray= np.load(filepath)
dataArray
现在是内存中的一个数组,与原始数组一样。它不是文件路径
内容的直接映像
f.write(dataArray)
我甚至不确定这个文件写了什么;它肯定与保存/加载不兼容。因此,您的常规Python文件链接将您发送到错误的方向
在一个文件中保存多个数组有两种简单的方法:
- 将这些数组合并成一个较大的数组,并保存该数组。这需要维度兼容性
np.savez
将多个数组保存到zip
存档中。也就是说,每个数组都保存到一个npy
文件中,这些数组都被收集到存档中np.load
能够加载这样一个npz
归档文件(但请阅读它关于延迟加载的说明)
这方面有一些变化。您可以使用外部工具滚动自己的归档。您还可以创建复杂的对象类型数组,np.save/load
可以处理这些数组。如果不能以普通方式保存元素,它将恢复为pickle。实际上,您可以使用pickle
保存多个数组
关于重复使用np.save
到同一个文件,也有很多讨论。这并不难做到,但加载更为棘手 它给了我这样的答案:我没有看到任何问题非常感谢你的帮助,但是在这个cas中,文件只保存最后一个文件的内容。你这是什么意思?它应该保存该目录中所有npy文件的数据。我不理解这两个文件:以open(fpath,'wb')作为f_句柄:对于glob.glob中的npfile(“*.npy”):你指的是fpath:大文件的路径吗??