简要背景:我是一名应用数学学生,最终需要学习编码;几个星期前我开始学习Python,以便加入一个运行气候数据分析的研究项目。我已经编写了4周的编码(除了枫和mathematica的东西),所以对我来说很容易;我会尽力提供信号而且没有噪音(如本段)。
我有一个运行分析的脚本,我终于让它运行了。创建许多NumPy数组(在下面保存的目录中引用的数组),然后将其保存到.npz文件中。 (我在Windows 10上运行这个:/)
np.savez('pr_zonaltimemean.npz', \
**{'pr_aqct':pr_aqct, 'pr_aq4x':pr_aq4x, 'pr_ldct':pr_ldct, \
'pr_ld4x':pr_ld4x, 'pr_ldor':pr_ldor, 'lat':lat} )
在这个阶段出现了一些问题:.npz文件,打开时(通过Jupyter或Notepad ++打开文件,没有任何意义。
1)如果我单击打开Jupyter终端中的文件,我会收到一条消息,指出该文件不是UTF-8编码的;然后我在Notepad ++中将文件转换为UTF-8(其中文件显示为随机字符和黑色块)。 Jupyter将打开转换后的文件,但同样会变得糊涂,尽管变量名称确实出现在糊状物中。
2)当我在未转换的文件上使用numpy.load()
时,我得到:numpy.lib.npyio.NpzFile at 0x8eb33c8
。
当我在转换后的文件上使用它时,我得到一串错误:
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
<ipython-input-4-9ad538351ff5> in <module>()
----> 1 np.load('1pr_globaltimemean.npz')
C:\Users\Ben\Anaconda2\lib\site-packages\numpy\lib\npyio.pyc in load(file, mmap_mode, allow_pickle, fix_imports, encoding)
397 own_fid = False
398 return NpzFile(fid, own_fid=tmp, allow_pickle=allow_pickle,
-->399 pickle_kwargs=pickle_kwargs)
400 elif magic == format.MAGIC_PREFIX:
401 # .npy file
C:\Users\Ben\Anaconda2\lib\site-packages\numpy\lib\npyio.pyc in __init__(self, fid, own_fid, allow_pickle, pickle_kwargs)
160 # Import is postponed to here since zipfile depends on gzip, an
161 # optional component of the so-called standard library.
--> 162 _zip = zipfile_factory(fid)
163 self._files = _zip.namelist()
164 self.files = []
C:\Users\Ben\Anaconda2\lib\site-packages\numpy\lib\npyio.pyc in zipfile_factory(*args, **kwargs)
90 import zipfile
91 kwargs['allowZip64'] = True
---> 92 return zipfile.ZipFile(*args, **kwargs)
93
94
C:\Users\Ben\Anaconda2\lib\zipfile.pyc in __init__(self, file, mode, compression, allowZip64)
768 try:
769 if key == 'r':
--> 770 self._RealGetContents()
771 elif key == 'w':
772 # set the modified flag so central directory gets written
C:\Users\Ben\Anaconda2\lib\zipfile.pyc in _RealGetContents(self)
827 # self.start_dir: Position of start of central directory
828 self.start_dir = offset_cd + concat
--> 829 fp.seek(self.start_dir, 0)
830 data = fp.read(size_cd)
831 fp = cStringIO.StringIO(data)
IOError: [Errno 22] Invalid argument
如果上述格式不正确,请注意。
我尝试运行分析(创建上述目录)而不保存到.npz文件,这产生了合法的数组。我尝试只创建一个数组并将其保存到.npy文件(numpy.save
)。我可以轻松打开,但我不知道是否可以保存所有数组并通过目录访问它们,就像代码所要做的那样。我没有写这段代码(也不能写,我只能解析它)。所以数据是在numpy数组中正确创建的,但在保存过程中出现了问题,我不知道如何或为什么。
如果有人能弄明白为什么.npz文件是a)没有正确保存数组或b)在我的计算机上没有正确打开那将是很棒的。如果无法做到这一点,可以选择其他建议。