Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中将多个numpy文件附加到一个大numpy文件中_Python_Numpy - Fatal编程技术网

在python中将多个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

我正在尝试放置许多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 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:大文件的路径吗??