Python 从二进制文件存储/加载numpy数组

Python 从二进制文件存储/加载numpy数组,python,file,binaryfiles,Python,File,Binaryfiles,我想从二进制文件中存储和加载numpy数组。为此,我创建了两个小函数。每个二进制文件应包含给定矩阵的维数 def saveArrayToFile(data, fileName): with open(fileName, 'w') as file: a = array.array('f') nSamples, ndim = data.shape a.extend([nSamples, ndim]) # write number of elem

我想从二进制文件中存储和加载numpy数组。为此,我创建了两个小函数。每个二进制文件应包含给定矩阵的维数

def saveArrayToFile(data, fileName):
    with open(fileName, 'w') as file:
        a = array.array('f')
        nSamples, ndim = data.shape
        a.extend([nSamples, ndim]) # write number of elements and dimensions
        a.fromstring(data.tostring())
        a.tofile(file)


def readArrayFromFile(fileName):
    _featDesc = np.fromfile(fileName, 'f')
    _ndesc = int(_featDesc[0])
    _ndim  = int(_featDesc[1])
    _featDesc = _featDesc[2:]
    _featDesc = _featDesc.reshape([_ndesc, _ndim])

    return _featDesc, _ndesc, _ndim
有关如何使用这些函数的示例如下:

myarr=np.array([[7, 4],[3, 9],[1, 3]])
saveArrayToFile(myarr,'myfile.txt')
_featDesc, _ndesc, _ndim = readArrayFromFile('myfile.txt')
但是,将显示一条错误消息“ValueError:新数组的总大小必须保持不变”。我的阵列可以是MxN和MxM大小。任何建议都是非常受欢迎的。 我认为问题可能出在saveArrayToFile函数中

致以最良好的祝愿


Javier

使用(和)将numpy数组转储(检索)到二进制文件。

好的,谢谢!但是,我确实需要将数组的MxN维度存储到文件中。将文件命名为
myfile\u MxN.npy
,是否足够?@Javier:我可以理解,如果您想在不读取整个文件的情况下获取数据,为什么您可能希望将数组维度保存在文件的前几个字节中。但是,
\u featDesc,\u ndesc,\u ndim=readArrayFromFile('myfile.txt')
表明您正在读取整个文件(不要偷看头位)。那么,为什么不简单地使用
arr=np.load(…)
,然后使用
\u ndesc,\u ndim=arr.shape