我有一个Python代码,其输出是一个 size矩阵,其条目都是类型
float
.如果我使用扩展名保存它,.dat
文件大小约为500 MB.我读到使用h5py
大大减少了文件大小.所以,假设我有名为的2D numpy数组A
.如何将其保存到h5py文件?另外,我如何读取相同的文件并将其作为一个numpy数组放在不同的代码中,因为我需要对数组进行操作?
我想知道,如何numpy.array
正确保存和加载数据.目前我正在使用该numpy.savetxt()
方法.例如,如果我有一个数组markers
,看起来像这样:
我尝试通过以下方式保存它:
numpy.savetxt('markers.txt', markers)
Run Code Online (Sandbox Code Playgroud)
在其他脚本中,我尝试打开以前保存的文件:
markers = np.fromfile("markers.txt")
Run Code Online (Sandbox Code Playgroud)
这就是我得到的......
保存的数据首先如下所示:
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
0.000000000000000000e+00
Run Code Online (Sandbox Code Playgroud)
但是当我通过使用相同的方法保存刚加载的数据时,即.numpy.savetxt()
它看起来像这样:
1.398043286095131769e-76
1.398043286095288860e-76
1.396426376485745879e-76
1.398043286055061908e-76
1.398043286095288860e-76
1.182950697433698368e-76
1.398043275797188953e-76
1.398043286095288860e-76
1.210894289234927752e-99
1.398040649781712473e-76
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?PS我没有其他"后台"操作.只需保存和加载,这就是我得到的.先感谢您.
统计软件Stata允许将短文本片段保存在数据集中.这可以使用notes
和/或完成characteristics
.
这对我来说是一个很有价值的功能,因为它允许我保存各种信息,从提醒和待办事项列表到有关我如何生成数据的信息,甚至是特定变量的估算方法.
我现在正试图在Python 3.6中提出类似的功能.到目前为止,我已经在线查看了一些帖子,但这些帖子并没有完全解决我想做的事情.
一些参考文章包括:
对于小型NumPy
数组,我得出结论,函数numpy.savez()
和a 的组合dictionary
可以在单个文件中充分存储所有相关信息.
例如:
a = np.array([[2,4],[6,8],[10,12]])
d = {"first": 1, "second": "two", "third": 3}
np.savez(whatever_name.npz, a=a, d=d)
data = np.load(whatever_name.npz)
arr = data['a']
dic = data['d'].tolist()
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在:
是否有更好的方法可以将其他信息包含在包含NumPy
数组或(大)的文件中Pandas
DataFrame
?
我在听到有关特定特别感兴趣的优点和缺点,你可能有例子的任何建议.依赖性越少越好.
我有一个 python 程序,我需要在其中加载和反序列化 1GB 的 pickle 文件。这需要 20 秒,我想要一种机制,可以随时使用泡菜的内容。我看过shared_memory但它的所有使用示例似乎都涉及 numpy 而我的项目不使用 numpy。使用shared_memory
或以其他方式实现这一目标的最简单和最干净的方法是什么?
这就是我现在加载数据的方式(每次运行):
def load_pickle(pickle_name):
return pickle.load(open(DATA_ROOT + pickle_name, 'rb'))
Run Code Online (Sandbox Code Playgroud)
我希望能够在两次运行之间编辑模拟代码而无需重新加载泡菜。我一直在搞乱,importlib.reload
但对于包含许多文件的大型 Python 程序来说,它似乎真的不太好用:
def main():
data_manager.load_data()
run_simulation()
while True:
try:
importlib.reload(simulation)
run_simulation()
except:
print(traceback.format_exc())
print('Press enter to re-run main.py, CTRL-C to exit')
sys.stdin.readline()
Run Code Online (Sandbox Code Playgroud) 如何使用PyTables将numpy多维数组放入HDF5文件中?
据我所知,我不能在pytables表中放置一个数组字段.
我还需要存储有关此数组的一些信息,并能够对其进行数学计算.
有什么建议?
我有一个Numpy数组,我想保存(130,000 x 3)我想使用Pickle保存,使用以下代码.但是,我一直在pkl.load行中收到错误"EOFError:Ran out of input"或"UnsupportedOperation:read".这是我第一次使用Pickle,任何想法?
谢谢,
一只蚂蚁
import pickle as pkl
import numpy as np
arrayInput = np.zeros((1000,2)) #Trial input
save = True
load = True
filename = path + 'CNN_Input'
fileObject = open(fileName, 'wb')
if save:
pkl.dump(arrayInput, fileObject)
fileObject.close()
if load:
fileObject2 = open(fileName, 'wb')
modelInput = pkl.load(fileObject2)
fileObject2.close()
if arrayInput == modelInput:
Print(True)
Run Code Online (Sandbox Code Playgroud) 我有一个很大的3d numpy数组,我想保留.我的第一种方法只是使用泡菜,但这似乎导致了一个解释不佳的错误.
test_rand = np.random.random((100000,200,50))
with open('models/test.pkl', 'wb') as save_file:
pickle.dump(test_rand, save_file, -1)
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-18-511e30b08440> in <module>()
1 with open('models/test.pkl', 'wb') as save_file:
----> 2 pickle.dump(test_rand, save_file, -1)
3
C:\Users\g1dak02\AppData\Local\Continuum\Anaconda\lib\pickle.pyc in dump(obj, file, protocol)
1368
1369 def dump(obj, file, protocol=None):
-> 1370 Pickler(file, protocol).dump(obj)
1371
1372 def dumps(obj, protocol=None):
C:\Users\g1dak02\AppData\Local\Continuum\Anaconda\lib\pickle.pyc in dump(self, obj)
222 if self.proto >= 2:
223 self.write(PROTO + chr(self.proto))
--> 224 self.save(obj)
225 self.write(STOP)
226
C:\Users\g1dak02\AppData\Local\Continuum\Anaconda\lib\pickle.pyc in save(self, obj)
329
330 …
Run Code Online (Sandbox Code Playgroud) 我有一个 20,000 x 20,000 Numpy 矩阵,我希望通过文件存储,其中平均体积只有 12 个值。
仅存储以下格式的值的最有效方法是什么
if array[i][j] == 1:
file.write("{} {} {{}}\n".format(i, j)
Run Code Online (Sandbox Code Playgroud)
其中 (i, j) 是数组的索引?