IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 文本读写与二进制读写 速度对比 Python Matlab -> 正文阅读

[Python知识库]文本读写与二进制读写 速度对比 Python Matlab

文本读写与二进制读写 速度对比 Python Matlab

引言

数据读写的速度往往会占用大量的时间,因此对Python和Matlab中不同的数据输出方式的速度进行了简单对比。

这是因为最近在写代码的过程中遇到一个问题,需要跨进程进行数据传输,但是目前还不太会使用共享内存,因此使用了较为传统的方式:一个程序将数据保存为文件,之后另一个程序进行读取,但是发现耗时较为严重,所以试图通过一些方法进行提速。

Python

对比方法

以大量的浮点数存储到文件中的任务进行测试。

首先对比Python中不同方法进行测试。

方式一:将浮点数转换成字符串,然后存储到文件中。

方式二:通过struct模块将数据转化为二进制,然后以二进制的方式写入文本。

方式三:将数据存放在Numpy的array中,通过tofile()函数直接进行二进制存储。

测试的完整代码如下:

import sys
import random
import time
import struct
import numpy as np
from array import array

def generate_random(n):
    random.seed(10)
    data = np.zeros(n)
    for i in range(n):
        data[i] = random.random()
    return data

def save_text(data):
    timest =  time.time()
    filename = '1.mac'
    f = open(filename,'w')
    for i in data:
        a = '%.6f' % i 
        f.write(a)
    f.close()
    timeend = time.time()
    print(timeend - timest,"存入文本 用时")
    return 0

def save_binary(data):
    '通过struct 打包进行读写'
    timest =  time.time()
    filename = '2.mac'
    f = open(filename,'wb')
    for i in data:
        a = struct.pack('d', i)
        f.write(a)
    f.close()
    timeend = time.time()
    print(timeend - timest, "struct 二进制 用时")
    return 0

def numpytofile(data):
    '直接使用numpy里的tofile'
    timest =  time.time()
    arr = data
    arr.tofile("3.bin")
    timeend = time.time()
    print(timeend - timest, " numpy 二进制 用时")
    return 0

def main(argv):
    # 对不同的写数据的方式进行对比
    data = generate_random(1000000)
    save_text(data)
    save_binary(data)
    numpytofile(data)

if __name__ == '__main__':
    main(sys.argv[1:])

测试结果

对100w个随机生成的浮点数进行测试。

三种方法的耗时如下:

0.4208517074 方法1:存入文本 用时
0.1994802951 方法2:struct 二进制 用时
0.0029914379 方法3:numpy 二进制 用时

从耗时结果来看,在存储同样的数据时,不同存储方式耗费的时间相差较大,其中以numpy的方式速度最快,且快进百倍。三种方法的对比如下表

方法耗时(s)优点缺点
方法一0.420851输出的文件可读速度最慢,会丢失浮点数的精度
方法二0.199480--
方法三0.002991输出速度最快,精确存储浮点数的值无法直接看到数据值

Matlab

对比方法

Matlab中也有多种数据输出方式。简单对比了两种方法:

方法一:使用dlmwrite函数

方法二:二进制方式输出

% 注释
rng('default')
arr = rand(100000,1);

% 方法一 使用dlmwrite函数输出
tic
dlmwrite('method1.txt',arr)
toc
t1 = toc;

% 方法二 使用二进制的方式输出
tic
fid = fopen('method2.bin','wb');
fwrite(fid,arr,'float64');
fclose(fid);
toc
t2 = toc;

测试结果

方法一:历时 1.449960 秒。
方法二:历时 0.001632 秒。
在输出10w 个浮点数时,其运行速度之比约 1.449/0.00163 = 888 倍

总结

从以上对比情况来看,合理的二进制读写可以在很大程度上提升数据的存储速度,并保证数据准确。该方法可显著提升数据的传递效率。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:08:24  更:2022-03-03 16:09:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:25:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码