Wil*_*nao 3 numpy scipy python-3.5
它必定是那些日子之一.我一直能够使用函数tofile来保存数据.但由于某种原因,今天它没有工作:)
import numpy as np
blah.....
print(type(blist))
npdata = np.array(blist)
print(type(npdata))
npdata.tofile('myfile.dat')
Run Code Online (Sandbox Code Playgroud)
获取以下结果:
Traceback (most recent call last):
File "C:/context.py", line 67, in <module>
npdata.tofile('myfile.dat')
OSError: cannot write object arrays to a file in binary mode
<class 'list'>
<class 'numpy.ndarray'>
Run Code Online (Sandbox Code Playgroud)
所以它说我以二进制模式打开文件.但据我所知,我不是以二进制模式打开它.
编辑(问题解决后):当我发布这个问题时,我假设blist是一个整数列表.相反,它是一个整数列表的列表.问题是,当我创建它时,我得到的是一个dtype = object而不是我期待的dtype = int32.
士气:确保正确使用np.append/np.extend并始终明确设置dtype.
根据tofile文档,如果sep是默认值,它将以二进制模式写入数组.
In [714]: x
Out[714]: array([[1, 2, 3], [1, 2]], dtype=object)
In [715]: x.tofile('test')
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-715-0ff8f3c688ad> in <module>()
----> 1 x.tofile('test')
OSError: cannot write object arrays to a file in binary mode
Run Code Online (Sandbox Code Playgroud)
它以二进制模式打开文件,但后来发现该数组是一个对象数组,它无法以这种方式编写.默认二进制模式用于快速将数字写入文件,而不是常规对象.
指定a sep,使其以文本模式写入,在本例中有效:
In [716]: x.tofile('test',sep=',')
In [717]: cat test
[1, 2, 3],[1, 2]
Run Code Online (Sandbox Code Playgroud)
我有另一个包含生成器的对象数组(来自另一个问题).
In [719]: g.tofile('test',sep=',')
In [720]: cat test
<generator object <genexpr> at 0xb266632c>
Run Code Online (Sandbox Code Playgroud)
因此在text模式下,tofile将str(x)数组的表示写入文件.
np.save更善于处理对象数组.它用于pickle编码无法写为常规数组的对象. np.load可以重新加载这样的文件.
| 归档时间: |
|
| 查看次数: |
1743 次 |
| 最近记录: |