如何保存 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 数组以便以后可以适当地加载它们?的主要内容,如果未能解决你的问题,请参考以下文章