如何制作相当于Fortran' access = stream'在python中

时间:2016-04-22 18:09:54

标签: python arrays io fortran

让我们说我做了一个循环,并且在每次迭代之后,你想扩展一些数组。

iter 1 ------------> iter 2 --------------> iter 3 --------------> ....

形状= [2,4] ---->形状= [2,12] ----->形状= [2,36] ----> ....

在fortran我以前通过将新数字附加到二进制文件来执行此操作:

OPEN(2,file='array.in',form='unformatted',status='unknown',access='stream')
write(2) newarray

所以这会在最后用新值扩展旧数组。

我希望在python中也这样做。这是我到目前为止的尝试:

import numpy as np

#write 2x2 array to binfile
bintest=open('binfile.in','wb')
np.ndarray.tofile(np.array([[1.0,2.0],[3.0,4.0]]),'binfile.in')
bintest.close()

#read array from binfile 
artest=np.fromfile('binfile.in',dtype=np.float64).reshape(2,2)

但是我无法扩展数组。让我们说...通过在最后添加另一个[[5.0,5.0],[5.0,5.0]],

#append new values.
np.ndarray.tofile(np.array([[5.0,5.0],[5.0,5.0]]),'binfile.in')

阅读后将其[[1.0,2.0,5.0,5.0],[3.0,4.0,5.0,5.0]]。 我怎么能这样做?

我遇到的另一个问题是,我希望能够在不知道最终阵列的形状的情况下做到这一点(我知道它将是2 x n)。但这并不是那么重要。

编辑:使用' access = stream'只是跳过必须阅读格式标题和尾部。

1 个答案:

答案 0 :(得分:0)

这就是诀窍:

import numpy as np

#write
bintest=open('binfile.in','ab')
a=np.array([[1.0,2.0],[3.0,2.0]])
a.tofile(bintest)
bintest.close()

#read
array=np.fromfile('binfile.in',dtype=np.float64)

这样,每次运行时,它都会将新数组附加到文件的末尾。