如何保存 numpy 数组以便以后可以适当地加载它们?

Posted

技术标签:

【中文标题】如何保存 numpy 数组以便以后可以适当地加载它们?【英文标题】:How do I save numpy arrays such that they can be loaded later appropriately? 【发布时间】:2017-03-15 17:59:51 【问题描述】:

我有一个代码,它在每次迭代时输出一个 N 长度的 Numpy 数组。

例如。 -- θ = [ 0, 1, 2, 3, 4 ]

我希望能够将数组动态保存到文本文件或 .csv 文件中,以便稍后加载数据文件并适当地提取哪个数组对应于哪个迭代。基本上,它应该以有序的方式保存。

我假设数据文件看起来像这样:-

0 1 2 3 4

1 2 3 4 5

2 3 4 5 6 ...(随机输出)

我想过使用 np.c_ 但我不想在每次迭代时都覆盖文件,如果我只是将终端输出保存为 > output.txt,它会保存为包含括号的数组。我不知道如何阅读这样的文本文件。

是否有适当的方法来执行此操作,即写入和读取数据?

【问题讨论】:

【参考方案1】:

我使用 pandas 和 openpyxl 来存储我用 Python 计算的数据。

这是一个生成 numpy 数组的示例,我将其转换为 pandas 数据帧,然后将其保存到位于“路径”中的 excel 文件中(请记住,如果您在 Windows 上工作,则需要在文件路径的开头,以便将符号“\”转换为符号“\\”)

import numpy as np
import pandas as pd
from openpyxl import load_workbook

path = r"C:\Users\fedel\Desktop\excelData\fileName.xlsx"

data = np.random.randn(100)
data = pd.DataFrame(data)
n = 0
data.to_excel(path, sheet_name = 'sheet number ' + str(n)) # save data in an excel worksheet

现在您可以打开“fileName.xlsx”文件并看到您将数据存储在名为“sheet number 0”的工作表上。

下一步是生成其他数据并将它们保存在其他工作表中,而不删除第一个

book = load_workbook(path) #load excel file 
writer = pd.ExcelWriter(path, engine = 'openpyxl') # use pandas to write in the some excel file
writer.book = book # write what you saved before in order to avoid "overwriting"

for n in range(1, 10):
    data = np.random.randn(100)
    data = pd.DataFrame(data)
    data.to_excel(writer, sheet_name = 'sheet number ' + str(n) ) # iteratively save data on different excel worksheets

writer.save()
writer.close()

当你想打开并分析你存储的数据时,我建议你输入

xls = pd.ExcelFile(path)
df1 = xls.parse(0)

如果您想打开第一个工作表中的数据或

xls = pd.ExcelFile(path)
df1 = xls.parse(1)

如果你想从第二个打开数据,你甚至可以写

xls = pd.ExcelFile(path)
dataNames = xls.sheet_names
df1 = xls.parse(dataNames[0])

【讨论】:

【参考方案2】:

您在寻找类似np.savetxt 的东西吗?

如果您想将数据附加到现有文件中,可以使用附加模式打开文件。

with open('data.txt', 'a') as f:
    np.savetxt(f, newdata)

查看这篇帖子Appending a matrix to an existing file using numpy

您可以使用np.loadtxt阅读文本文件

【讨论】:

是的,我是这么想的。这应该有效。【参考方案3】:

ndarray.tofile() 方法怎么样?阅读使用numpy.fromfile()

【讨论】:

这个方法似乎也合适。感谢您的解决方案。

以上是关于如何保存 numpy 数组以便以后可以适当地加载它们?的主要内容,如果未能解决你的问题,请参考以下文章

如何用数组(或任何其他支持加法以便它可以偏移的东西)干净地索引numpy数组[重复]

如何正确保存和加载 numpy.array() 数据?

保存在磁盘上的 numpy 数组中的随机访问

Python:如何以通道,行,cols格式保存图像?

numpy 保存/加载损坏数组

无法设置从 Numpy 数组读取的适当 dtype