Mat*_*hem 9 python file-io numpy multidimensional-array
我试图使用numpy.savetxt将4D numpy浮点数组输出到纯文本文件
但是numpy给出了一个错误,指出当我尝试传递此数组时需要float参数.然而,numpy doc指定要传递的参数应该只是数组...而不是它应该是最大等级2.我能使其工作的唯一方法是将数据重新整形为2D(这实际上不是因数据组织原因总是实用的)
这有什么办法吗?或者必须将numpy数组重塑为2D?我希望能够像逐列一样读取fortran中的数据(通过维度进行处理).
还有其他可能吗?请注意,我不想使用npy格式,因为我寻求与需要纯文本格式的另一个程序的兼容性.
如果你看一下numpy.savetxt你会发现的源代码
for row in X:
fh.write(asbytes(format % tuple(row) + newline))
Run Code Online (Sandbox Code Playgroud)
所以numpy.savetxt只适用于1或2D阵列.
对于互操作性,如果有足够的内存将numpy数组转换为列表,则可以使用JSON:
import json
import numpy as np
a = np.arange(24).reshape(-1, 2, 3, 4).astype('float')
a[0,0,0,0] = np.nan
with open('/tmp/out', 'w') as f:
json.dump(a.tolist(), f, allow_nan = True)
Run Code Online (Sandbox Code Playgroud)
产量
[[[[NaN, 1.0, 2.0, 3.0], [4.0, 5.0, 6.0, 7.0], [8.0, 9.0, 10.0, 11.0]], [[12.0, 13.0, 14.0, 15.0], [16.0, 17.0, 18.0, 19.0], [20.0, 21.0, 22.0, 23.0]]]]
Run Code Online (Sandbox Code Playgroud)
另一种方法是将数组保存为简单的数字列表(数组的平面版本),并保存有关其形状的信息。
多维数组的问题在于,即使是文本格式,将它们从一个程序移动到另一个程序也不是那么简单。
你可以这样做:
myarray = rand(5,5,5)
name = 'myarray'+myarray.shape+'.txt'
np.savetxt(name,myarray.flatten())
Run Code Online (Sandbox Code Playgroud)
并使用文件名中包含的大小信息来恢复初始形状
| 归档时间: |
|
| 查看次数: |
3995 次 |
| 最近记录: |