Python科学计算结果的存储与读取
Python科学计算结果的存储与读取
总结于2019年3月17日 荆楚理工学院 计算机工程学院
一、前言
显然,作为一名工科僧,执行科学计算,需用Python。PS:快忘记Matlab吧。我用了二十年的时间,熟练掌握了Matlab的用法,然后,很可能,我用6个月不到的时间,选择并实现了用Python替换Matlab。虽然来到了计算机工程学院,但是工程计算是本业,不能久,然后我突然间发现,好多时候,只用pyplot显示结果,我们的计算结果,很多时候需要存储和重复调用的哪,一个图的话,若再需要数据,下次需要,难道再发费几小时重新计算?
用Python替换Matlab的理由:
(1)并行多核计算简单,效率高
之前用Matlab,并行计算需要时间几小时完成一项工作,该工作相似的计算,在Python里仅 用了2小时不到,5300多秒。可见其差异。另外,并行多核计算的代码非常简单,导入multiprocessing,定义其processes=cpu_count,然后导入Pool,执行apply_async(),调用get()获得return的结果即可,简单,强大!
(2)占地不大
Matlab现在是越来越大了,您懂得……,但并卵,安装Anaconda也不到3GB吧?我添加了许多插件了的。
(3)通用性强
这个,Python作为一门通用语言,已经成功登顶计算机语言排行榜首,不用多说了吧?
二、在Python中存储和读取科学计算结果
1、计算实例
显然,科学计算往往十分复杂,我此处用一个简单的混沌 映射序列作为后来结果的演示:
# 导入各种支持
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import random
import math
import json
# import redis # 建立科学计算
# Chebyshev map,初始值0。7,无关a值问题,注意取值是【-1,1】,可通过math.fabs实现切换m
def Chebyshev(maxIter, initial_value=0.7, a=1.0):
y = [0.0] * maxIter
for i in range(maxIter):
if i == 0:
y[i] = initial_value
else:
y[i] = math.cos(i / math.cos(y[i - 1]))
return y
2、采用Json存储和读取
# 采用json存储结果
def test_json_write():
maxIter = 500
chaos = Chebyshev(maxIter)
data = { 'chaos':chaos, 'maxIter':500}
datum = json.dumps(data, ensure_ascii=False)
with open('chaos.json', 'w') as f:
json.dump(data, f, indent=4, sort_keys=False) # 采用json读取文件
def test_json_read():
fileName = "chaos"
with open('{}.json'.format(fileName), 'r') as fp:
result = json.load(fp)
chaos = result['chaos']
maxIter = result['maxIter']
plt.plot(chaos)
plt.show()
优点:一是可以使用dict字典的形式,使结果存储于JSON中,二是数据可见,通用性强;三是复用方便。
3、使用numpy的形式读取和使用
numpy提供了数组的三种存取方法,如save、load组;tofile和Fromfile组;以及savetxt和loadtxt组,三种方法均可以使用,注意前两种情况是对数组加密的,无法像json或txt一样能够显示计算结果。因此,我们在有条件的情况下,可以txt型,但若有json存储方法存在,Txt其实也没有啥优势,毕竟科学计算结果较大,txt数据文件较大时,不好读入。
# 测试数组的存储方式
def test_numpy_save():
maxIter = 500
chaos = Chebyshev(maxIter)
data = np.array(chaos)
# data.tofile('chaos.npy',format='%e')
np.savez('chaos.npz', maxIter, chaos) # 测试numpy文件的读取
def test_numpy_load():
# chaos=np.fromfile('chaos.npy',dtype=np.double)
result = np.load("chaos.npz")
chaos = result["arr_1"]
plt.plot(chaos)
plt.show()
优点:前两种方法,可以实现数据的简单加密功能。
缺点:(1)如果是其它类型如序列list,需要先转换为数组。(2)save和load,多组存储时,需要按顺序对应读出,显然不方便 。
三、总结
1、存储单个列表
如果只需要存储一个列型数据,如errro序列,则可以直接用numpy的存储方式,先将序列转换为numpy数组,使用数组的三种存储方式均是可以的。
2、多个数组可使用词曲的方式存储
当有多个需要存储的内容时,可将其转换为词典的格式,统一为data={‘key1 ’:value1, ’key2’:value2 ,……},然后采用json.dump(data,file)的格式,将数据存储为json格式。
仅用于个人学习和分享,谢绝转载!
版权所有,违者必究。
Python科学计算结果的存储与读取的更多相关文章
- Python科学计算之Pandas
Reference: http://mp.weixin.qq.com/s?src=3×tamp=1474979163&ver=1&signature=wnZn1UtW ...
- Python科学计算库Numpy
Python科学计算库Numpy NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. 1.简 ...
- Python科学计算基础包-Numpy
一.Numpy概念 Numpy(Numerical Python的简称)是Python科学计算的基础包.它提供了以下功能: 快速高效的多维数组对象ndarray. 用于对数组执行元素级计算以及直接对数 ...
- Python科学计算类库
Numpy是什么 Numpy是一个开源的Python科学计算库.使用Numpy,就可以很自然地使用数组和矩阵.Numpy包含很多实用的数学函数,涵盖线性代数运算.傅里叶变换和随机数生成等功能. 矩阵: ...
- windows下安装python科学计算环境,numpy scipy scikit ,matplotlib等
安装matplotlib: pip install matplotlib 背景: 目的:要用Python下的DBSCAN聚类算法. scikit-learn 是一个基于SciPy和Numpy的开源机器 ...
- Python科学计算(二)windows下开发环境搭建(当用pip安装出现Unable to find vcvarsall.bat)
用于科学计算Python语言真的是amazing! 方法一:直接安装集成好的软件 刚开始使用numpy.scipy这些模块的时候,图个方便直接使用了一个叫做Enthought的软件.Enthought ...
- 目前比较流行的Python科学计算发行版
经常有身边的学友问到用什么Python发行版比较好? 其实目前比较流行的Python科学计算发行版,主要有这么几个: Python(x,y) GUI基于PyQt,曾经是功能最全也是最强大的,而且是Wi ...
- Python 科学计算-介绍
Python 科学计算 作者 J.R. Johansson (robert@riken.jp) http://dml.riken.jp/~rob/ 最新版本的 IPython notebook 课程文 ...
- Python科学计算库
Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...
随机推荐
- windows10环境下VMware14中Ubuntu16.04解决如何上网问题
进入控制面板,网络和Internet,网络连接 点击以太网,查看详细信息 点击属性 --> 共享,允许其他网络-->选择VMnet1 点开虚拟机编辑选项 ,选择 VMNET1 仅主机,其他 ...
- httping使用
httping --help: 显示帮助 httping -V: 显示版本 1.httping国内网站 I) httping -g http://www.jd.com -c 5 -t 5 -F -s ...
- java8_api_jni
java本地接口 jni java native interface,用于java代码和本地编程语言(c,c++等)交互的编程接口 java不太会跟底层硬件打交道,而c,c++跟底层 ...
- 火狐firebug和firepath插件安装方法(最新)
火狐浏览器最近下掉了firebug和firepath插件,用户即使下载了火狐55以下的版本,也无法查找到这两个插件. 因此,可以用以下方法来获取这两个插件. 1.下载火狐55以内版本安装包,安装时迅速 ...
- eclipse项目改为maven项目导致svn无法比较历史数据的解决办法
这个问题没有找到合适的答案,最终自己想出了一个解决方案,在此记录下. 问题描述 在将老的eclipse项目重构为maven项目时,我这边是新建了一个maven项目,然后将对应的数据分别放到相应的位置, ...
- tcpdump+wireshark抓包分析
上一篇文章中,我们介绍了tcpdump如何抓包. tcpdump是命令行下便捷的抓包和分析工具,但使用方式不够友好, wireshark是带图形化界面的抓包和分析工具,操作简便,但需要主机有显示器. ...
- 图形化SVN管理搭建 subversion edge自行修改密码
参考文章: https://blog.csdn.net/buyaore_wo/article/details/84313467 安装版本: Subversion Edge 5.2.3 (Linux 6 ...
- chrony配置的和相关命令
ntp命令 查看时间同步源: $ chronyc sources -v 查看时间同步源状态: $ chronyc sourcestats -v 设置硬件时间 硬件时间默认为UTC: $ timedat ...
- Spring Cloud(Dalston.SR5)--Config 集群配置中心-刷新配置
远程 SVN 服务器上面的配置修改后,需要通知客户端来改变配置,需要增加 spring-boot-starter-actuator 依赖并将 management.security.enabled 设 ...
- 【申嵌视频】基于VMWare虚拟机下安装ubuntu操作系统的详细步骤
[申嵌视频]基于VMWare虚拟机下安装ubuntu操作系统 适合搭建mini2440, Tiny6410, smart210,Tiny4412, NanoPC-T2, NanoPC-T3, Nano ...