在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python怎樣存儲(chǔ)變量性能最優(yōu)

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-17 11:34 ? 次閱讀

工作時(shí)我們經(jīng)常會(huì)遇到需要臨時(shí)保存結(jié)果變量的場(chǎng)景,尤其是一些數(shù)據(jù)處理、模型開(kāi)發(fā)的場(chǎng)景,加載處理速度是個(gè)很漫長(zhǎng)的過(guò)程,于是經(jīng)常會(huì)把這些變量?jī)?chǔ)存起來(lái)。

而儲(chǔ)存變量最常見(jiàn)、最普遍的方法是用pickle,保存為pkl文件。但是如果從寫(xiě)入和讀取的性能角度考慮,pkl可能真的不是最優(yōu)選。

Pickle有其獨(dú)特的好處,大部分變量不需要進(jìn)行處理,都能直接存到pkl文件里,但這樣的方便其實(shí)是犧牲了部分性能取得的。與之相比,numpy的.npy格式就比pickle性能上快不少。

當(dāng)然,我們需要有證據(jù)支撐這個(gè)觀點(diǎn)。所以今天我們就來(lái)做個(gè)實(shí)驗(yàn),分別在Python2和Python3中對(duì)比 numpy 和 pickle 兩種存儲(chǔ)格式(.npy, .pkl) 對(duì)數(shù)據(jù)的存儲(chǔ)和讀取的性能對(duì)比。

1. Python2中, npy與pkl的性能對(duì)比

首先初始化數(shù)據(jù):

import numpy as np
import time
import cPickle as pkl
import os

all_batches = []
for i in range(20):
    a1 = np.random.normal(size=[25600, 40])
    label = np.random.normal(size=[25600, 1])
    all_batch = np.concatenate([a1, label], 1)
    all_batches.append(all_batch)
all_batches = np.array(all_batches)
print(all_batches.shape)
# (20, 25600, 41)

然后測(cè)試使用pickle保存和讀取時(shí)間的耗時(shí),以及整個(gè)文件的大小:

s_t1 = time.time()
pkl_name = "a.pkl"
with open(pkl_name, "wb") as f:
    pkl.dump(all_batches, f)
pkl_in_time = time.time() - s_t1
print("pkl dump costs {} sec".format(pkl_in_time))

s_t2 = time.time()
with open(pkl_name, "rb") as f:
    new_a = pkl.load(f)
pkl_out_time = time.time() - s_t2
print("pkl load costs {} sec".format(pkl_out_time))

pkl_size = os.path.getsize(pkl_name)
print("pkl file size: {} byte, {} mb".format(pkl_size, float(pkl_size)/(1024*1024)))

結(jié)果如下:

圖片

即:

pkl dump costs 67.7483091354 sec
pkl load costs 52.1168899536 sec
pkl file size: 497437110 byte, 474.392995834 mb

然后再試一下npy的寫(xiě)入和讀取:

s_t3 = time.time()
npy_name = "a.npy"
with open(npy_name, "wb") as f:
    np.save(f, arr=all_batches)
npy_in_time = time.time() - s_t3
print("npy save costs {} sec".format(npy_in_time))
s_t4 = time.time()
with open(npy_name, "rb") as f:
    new_a = np.load(f)
npy_out_time = time.time() - s_t4
print("npy load costs {} sec".format(npy_out_time))
npy_size = os.path.getsize(npy_name)
print("npy file size: {} byte, {} mb".format(npy_size, float(npy_size) / (1024 * 1024)))

結(jié)果如下:

圖片

即:

npy save costs 20.718367815 sec
npy load costs 0.62314915657 sec
npy file size: 167936128 byte, 160.15637207 mb

結(jié)果發(fā)現(xiàn),npy性能明顯優(yōu)于pkl格式。

通過(guò)多次測(cè)試發(fā)現(xiàn),在Python2中,npy格式的性能優(yōu)勢(shì)全面碾壓pkl,工程允許的情況下,在Python2中,我們應(yīng)該在這二者中毫不猶豫地選擇npy.

2.Python3中, npy與pkl的性能對(duì)比

Python2已經(jīng)是過(guò)去式,重點(diǎn)還要看Python3.

在Python3中,與Python2的代碼唯一一句不一樣的是pickle的引入:

# Python2:
import cPickle as pkl

# Python3:
import pickle as pkl

其他代碼基本一樣,替換代碼后,重新運(yùn)行程序,讓我們看看在Python3上,npy格式和pkl格式性能上的區(qū)別,首先是pkl格式的表現(xiàn):

ckenddeMacBook-Pro:Documents ckend$ python 1.py
(20, 25600, 41)
pkl dump costs 24.32167887687683 sec
pkl load costs 4.480823040008545 sec
pkl file size: 167936163 byte, 160.15640544891357 mb

然后是npy格式的表現(xiàn):

npy save costs 22.471696853637695 sec
npy load costs 0.3791017532348633 sec
npy file size: 167936080 byte, 160.1563262939453 mb

可以看到在Python3中pkl格式和npy格式的存儲(chǔ)大小是基本相同的,在存儲(chǔ)耗時(shí)上也相差無(wú)幾。但是在讀取數(shù)據(jù)的時(shí)候,npy相對(duì)于pkl還是有一定的優(yōu)勢(shì)的。

因此,如果你的程序非常注重讀取效率,那么我覺(jué)得npy格式會(huì)比pkl格式更適合你。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7246

    瀏覽量

    91225
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4507

    瀏覽量

    87128
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4825

    瀏覽量

    86304
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    python環(huán)境變量的配置pip

    開(kāi)始,然后討論如何找到Python的安裝路徑以及如何配置環(huán)境變量。接下來(lái),我們將詳細(xì)講解pip的用途和安裝方法,并解決一些與pip相關(guān)的常見(jiàn)問(wèn)題。 一、環(huán)境變量的概念 環(huán)境變量是操作系
    的頭像 發(fā)表于 12-15 15:41 ?3012次閱讀

    怎樣才能使本本達(dá)到最優(yōu)性能

    怎樣才能使本本達(dá)到最優(yōu)性能 問(wèn)題:我是一個(gè)最近購(gòu)本的菜鳥(niǎo),請(qǐng)問(wèn)怎樣才能使本本達(dá)到最優(yōu)性能? 回
    發(fā)表于 01-25 14:39 ?561次閱讀

    python環(huán)境變量設(shè)置

    安裝python之后,我們往往面臨這樣一個(gè)問(wèn)題,在命令行輸入“python”,竟然出錯(cuò),難道是沒(méi)有安裝成功嗎?非也,其實(shí)是你的系統(tǒng)環(huán)境變量沒(méi)有設(shè)置好。今天,小編就來(lái)帶大家學(xué)學(xué)python
    發(fā)表于 11-20 11:47 ?2475次閱讀
    <b class='flag-5'>python</b>環(huán)境<b class='flag-5'>變量</b>設(shè)置

    Python的常量與變量基礎(chǔ)知識(shí)詳解

    Python是一門(mén)強(qiáng)類(lèi)型的動(dòng)態(tài)語(yǔ)言。 字面常量,變量沒(méi)有類(lèi)型,變量只是在特定的時(shí)間指向特定的對(duì)象而已,變量所指向的對(duì)象是有類(lèi)型的。 變量
    發(fā)表于 12-14 05:31 ?1922次閱讀

    python性能之服務(wù)優(yōu)化的方法解析

    怎樣發(fā)揮Python語(yǔ)言的最高性能
    的頭像 發(fā)表于 12-31 01:04 ?3747次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>性能</b>之服務(wù)優(yōu)化的方法解析

    python設(shè)置環(huán)境變量

    我們想要運(yùn)行python,需要安裝Python,還要設(shè)置一些環(huán)境變量1,此電腦,右鍵屬性2、高級(jí)系統(tǒng)設(shè)置-> 環(huán)境變量3、在系統(tǒng)變量中找到p
    發(fā)表于 11-10 14:49 ?984次閱讀

    Python私有變量的定義方法

    學(xué)過(guò)編程語(yǔ)言的人員,都知道私有變量在編程中必不可少,與Java和C語(yǔ)言用private關(guān)鍵字定義私有變量不同,Python是在變量前面加上雙橫杠(例如:__test)來(lái)標(biāo)識(shí),
    發(fā)表于 02-13 16:49 ?1766次閱讀

    Python變量類(lèi)型詳細(xì)資料說(shuō)明

    Python 中的變量賦值不需要類(lèi)型聲明。每個(gè)變量在內(nèi)存中創(chuàng)建,都包括變量的標(biāo)識(shí),名稱(chēng)和數(shù)據(jù)這些信息。每個(gè)變量在使用前都必須賦值,
    發(fā)表于 08-24 16:47 ?3次下載
    <b class='flag-5'>Python</b>的<b class='flag-5'>變量</b>類(lèi)型詳細(xì)資料說(shuō)明

    深入了解python常量與變量

      Python變量和常量不需要事先聲明類(lèi)型,這是根據(jù)Python的動(dòng)態(tài)語(yǔ)言特性而來(lái)。
    的頭像 發(fā)表于 02-16 18:22 ?2149次閱讀
    深入了解<b class='flag-5'>python</b>常量與<b class='flag-5'>變量</b>

    python變量的作用域

    python變量的作用域 1. 作用域 Python的作用域可以分為四種: L (Local) 局部作用域 E (Enclosing) 閉包函數(shù)外的函數(shù)中 G (Global) 全局作用域 B
    的頭像 發(fā)表于 03-03 16:50 ?1805次閱讀

    Python-無(wú)處不在的變量

    Python中,每個(gè)變量在使用前都必須賦值,變量賦值以后,該變量才會(huì)被創(chuàng)建
    的頭像 發(fā)表于 02-16 14:51 ?806次閱讀

    淺析python變量類(lèi)型

    python不需要事先聲明變量python變量類(lèi)型是在運(yùn)行過(guò)程中自動(dòng)決定的,不需要代碼聲明類(lèi)型。
    的頭像 發(fā)表于 03-10 10:11 ?987次閱讀
    淺析<b class='flag-5'>python</b>的<b class='flag-5'>變量</b>類(lèi)型

    如何配置Python環(huán)境變量

    配置Python環(huán)境變量是在安裝Python解釋器后的一項(xiàng)重要步驟,它允許您在任何位置都可以通過(guò)命令行或腳本運(yùn)行Python解釋器,使Python
    的頭像 發(fā)表于 04-14 12:16 ?2.1w次閱讀

    Python怎樣存儲(chǔ)變量性能最優(yōu)

    ,保存為pkl文件。但是如果從寫(xiě)入和讀取的性能角度考慮,pkl可能真的不是最優(yōu)選。 Pickle有其獨(dú)特的好處,大部分變量不需要進(jìn)行處理,都能直接存到pkl文件里,但這樣的方便其實(shí)是犧牲了部分
    的頭像 發(fā)表于 10-30 15:33 ?546次閱讀
    <b class='flag-5'>Python</b><b class='flag-5'>怎樣</b><b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>變量</b><b class='flag-5'>性能</b><b class='flag-5'>最優(yōu)</b>

    python變量命名規(guī)則

    Python是一種高級(jí)編程語(yǔ)言,廣泛應(yīng)用于軟件開(kāi)發(fā)、數(shù)據(jù)分析和科學(xué)計(jì)算等領(lǐng)域。在Python中,變量是用來(lái)存儲(chǔ)數(shù)據(jù)的容器,它們具有名稱(chēng)以及與之關(guān)聯(lián)的值。然而,
    的頭像 發(fā)表于 11-23 15:44 ?2173次閱讀
    主站蜘蛛池模板: 欧美一区中文字幕 | 婷婷社区五月天 | aa亚洲| 色欧美色 | 国产拍拍视频 | 亚州一级 | 免费观看黄网站 | 宅男69免费永久网站 | 深爱五月激情网 | 国产三级播放 | 欧美αv日韩αv另类综合 | hs网站免费 | 日本3级视频 | 免费网站黄色 | 日韩毛片在线影视 | 看免费黄色大片 | 九色在线播放 | 99成人在线观看 | 午夜在线视频观看版 | 3p高h文| 成人免费观看一区二区 | 你懂的在线观看网址 | 国产精品情人露脸在线观看 | 日本不卡一区二区三区视频 | 男人的天堂色偷偷之色偷偷 | 天天摸天天澡天天碰天天弄 | 亚洲精品一卡2卡3卡三卡四卡 | 2018天堂视频免费观看 | 欧美成人全部免费观看1314色 | 欧美freesex10一|3 | 直接看黄的网站 | xxxx久久| 欧美一级看片免费观看视频在线 | 久久午夜影视 | 深爱激情站 | 国产美女在线精品免费观看 | 午夜精品福利影院 | 日本边添边爱边摸边做边爱 | 国产成人mv 在线播放 | 婷婷开心激情 | 婷婷 色天使 |