文本读写与二进制读写速度对比pythonmatlab(代码片段)

Lzn_nzL Lzn_nzL     2023-02-19     791

关键词:

文本读写与二进制读写 速度对比 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 倍

总结

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

文本读写与二进制读写速度对比pythonmatlab(代码片段)

文本读写与二进制读写速度对比PythonMatlab文章目录文本读写与二进制读写速度对比PythonMatlab引言Python对比方法测试结果Matlab对比方法测试结果总结引言数据读写的速度往往会占用大量的时间,因此对Python和Matlab中不同的数据... 查看详情

文件系统:文本的读写,二进制的读写,流的读写,最近访问列表和未来访问列表

演示如何读写文本数据演示如何读写二进制数据演示如何读写流数据演示如何读写“最近访问列表”和“未来访问列表”1、演示如何读写文本数据<StackPanelMargin="0,50">          ... 查看详情

nandflash读写

1.NandFlash分类根据物理结构上的区别,NandFlash主要分为如下两类:•SLC(SingleLevelCell):单层式存储•MLC(MultiLevelCell):多层式存储SLC在存储格上只存一位数据,而MLC则存放两位数据。2.MLC与SLC对比价格:由于MLC采用了更高密度的存储... 查看详情

python文件的打开与读写

...照字符串方式,采用计算机当前编码或指定编码./当文件以二进制方式打开时,读写按照字节流方式./python本身将文件读取为一个行序列. 查看详情

文本文件和二进制文件的读写问题

因为工作的需要,需要读写自定义文件格式,要求以二进制方式进行读写,数据对用户来说是不可见的。首先考虑用C++实现,代码如下:1std::ofstreamfout("test.in",std::ios::binary|std::ios::out);2std::stringstr("Hello,world!");3doublenNum=100.00;4fout.wr... 查看详情

用 C 读写文件

...。如果读取,它会读取文件并将其输出到屏幕。文本以非二进制模式写出-这与项目#2的文件读写不同。记住我们如何使用fgets()输入字符串。还有一个fputs()。我正在尝试编写写入部分的代码,但我无法弄清楚我 查看详情

2015.1.5用dbfactorysingleton写读二进制字段与oralceclob类型字段读写[除非需要做内部解析,不要用clob,clob速度要比blob慢15倍以上]

//写FileStreamfstr=File.OpenRead(tb_filepath.Text);//openread函数用于打开只读文件,openwrite可写BinaryReaderbr=newBinaryReader(fstr);byte[]buffer=br.ReadBytes((int)fstr.Length);stringsql=string.Format("insertintoNV 查看详情

硬盘iops与读写速度

IOPS (Input/OutputPerSecond)即每秒的输入输出量(或读写次数),是衡量磁盘性能的主要指标之一。IOPS是指单位时间内系统能处理的I/O请求数量,一般以每秒处理的I/O请求数量为单位,I/O请求通常为读或写数据操作请求。随机读写频... 查看详情

《c语言程序设计》文件(代码片段)

记录学习过程中的知识点文章目录一、文件1.1ASCII文件1.2二进制文件1.3文件缓冲区1.4文件类型指针1.5文件尾标志EOF二、打开与关闭文件2.1fopen()2.2fclose()三、顺序读写数据文件3.1向文件读写字符3.1.1fgetc()3.2向文件读写字符串3.2.1fgets... 查看详情

win2012怎样测试磁盘的读写io速度

参考技术A先用WIN自带的磁盘整理程序,如果没有改善,可以用磁盘读写测试软件来看下速度,个人比较推荐老牌的ATTODiskBenchmark.还有传输时间要看你传的什么,1G的电影绝对比1G的软件要快,取决你传输的文件里有多少子文件. 查看详情

瑞萨rz/g2larm开发板存储读写速度与网络实测(代码片段)

本篇文章基于飞凌嵌入式OK-G2LD-C开发板,针对其存储读写速度和千兆网带宽进行测试。相信能够帮助各位工程师小伙伴更加深入地了解这套板卡。存储读写速度测试1.eMMC读写测试OK-G2LD-C平台的eMMC默认运行于HS200模式,工... 查看详情

实验7(代码片段)

part1验证性实验1实验2已知人数未知人数实验三实验四二进制文件与文本文件二进制文件储存是以内存里面的数据直接读写;文本文件是将数据先转换成了字符串;二进制文件储存量小,转换速度更快,文本文件更直观。part2#inclu... 查看详情

随机读写与顺序读写怎么去理解

...数字1(磁化为1),凹的地方代表数字0。因此硬盘可以以二进制来存储表 查看详情

c语言如何读写二进制

二进制在写入文件时模式已经用了“wb”,但写入的东西用记事本打开怎么还是文本文档,而不是乱码呢?我用fprintf,fputs,fwrite都试过了,都不显示乱码。请问应该怎么写入二进制?1、二进制文本使用fopen函数的二进制模式“r... 查看详情

python3-读写字节数据

参考技术A读写二进制文件,比如图片,声音文件等等。使用模式为rb或wb的open()函数来读取或写入二进制数据。比如:在读取二进制数据时,需要指明的是所有返回的数据都是字节字符串格式的,而不是文本字符串。类似的,在... 查看详情

golang读写二进制文件

参考技术A我们需要对一些文本进行"明文加密",何为"明文加密"?从一些错乱的数据中,提取我们想要的数据.生成错乱的数据(可以随机生成)只需从上面的字符串提取数字即可,45.89.0.8这里只是举个简单例子这样就会该g... 查看详情

c语言文件操作详解(代码片段)

目录文件的概念 文件的分类 数据文件的分类文本文件 二进制文件 文件的操作 文件的打开与关闭 打开文件 关闭文件 文件指针文件名 文件缓冲区fopen函数的第二个参数 文件的顺序读写 文件的顺序读写函数  fputc与fgetc... 查看详情

c文件读写

C程序员如何创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲... 查看详情