最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?list與numpy數(shù)組效率對(duì)比

 更新時(shí)間:2023年02月01日 08:30:26   作者:強(qiáng)殖裝甲凱普  
這篇文章主要介紹了python?list與numpy數(shù)組效率對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

前言

因?yàn)榻?jīng)常一訓(xùn)練就是很多次迭代,所以找到效率比較高的操作能大大縮短運(yùn)行時(shí)間,但這方面資料不足,所以自己記錄總結(jié)一下,有需要再補(bǔ)充

索引效率與內(nèi)存占用比較

有時(shí)候我需要一個(gè)數(shù)組,然后可能會(huì)頻繁從中索引數(shù)據(jù),那么我選擇list還是numpy array呢,這里做了一個(gè)簡(jiǎn)單的實(shí)驗(yàn)進(jìn)行比較,環(huán)境python 3.6

import random
import numpy as np
import time
import sys
# import matplotlib
# matplotlib.use('agg')
import matplotlib.pyplot as plt
from collections import deque

start = time.time()
length = []

list_size = []
array_size = []
deque_size = []

list_time = []
array_time = []
deque_time = []

for l in range(5, 15000, 5):
    print(l)
    length.append(l)
    a = [1] * l
    b = np.array(a)
    c = deque(maxlen=l)
    for i in range(l):
        c.append(1)

    # print('list的size為:{}'.format(sys.getsizeof(a)))
    # print('array的size為:{}'.format(sys.getsizeof(b)))
    # print('deque的size為:{}'.format(sys.getsizeof(c)))
    list_size.append(sys.getsizeof(a))
    array_size.append(sys.getsizeof(b))
    deque_size.append(sys.getsizeof(c))

    for i in range(3):
        if i == 0:
            tmp = a
            name = 'list'
        elif i == 1:
            tmp = b
            name = 'array'
        else:
            tmp = c
            name = 'deque'

        s = time.time()
        for j in range(1000000):
            x = tmp[random.randint(0, len(a)-1)]
        duration = time.time() - s

        if name == 'list':
            list_time.append(duration)
        elif name == 'array':
            array_time.append(duration)
        else:
            deque_time.append(duration)

duration = time.time() - start
time_list = [0, 0, 0]
time_list[0] = duration // 3600
time_list[1] = (duration % 3600) // 60
time_list[2] = round(duration % 60, 2)
print('用時(shí):' + str(time_list[0]) + ' 時(shí) ' + str(time_list[1]) + '分' + str(time_list[2]) + '秒')

fig = plt.figure()

ax1 = fig.add_subplot(211)
ax1.plot(length, list_size, label='list')
ax1.plot(length, array_size, label='array')
ax1.plot(length, deque_size, label='deque')
plt.xlabel('length')
plt.ylabel('size')
plt.legend()

ax2 = fig.add_subplot(212)
ax2.plot(length, list_time, label='list')
ax2.plot(length, array_time, label='array')
ax2.plot(length, deque_time, label='deque')
plt.xlabel('length')
plt.ylabel('time')
plt.legend()

plt.show()

對(duì)不同大小的list,numpy array和deque進(jìn)行一百萬(wàn)次的索引,結(jié)果為

可以看出,numpy array對(duì)內(nèi)存的優(yōu)化很好,長(zhǎng)度越大,其相比list和deque占用內(nèi)存越少。

list比deque稍微好一點(diǎn)。因此如果對(duì)內(nèi)存占用敏感,選擇優(yōu)先級(jí):numpy array>>list>deque。

時(shí)間上,在15000以下這個(gè)長(zhǎng)度,list基本都最快。其中

  • 長(zhǎng)度<1000左右時(shí),deque跟list差不多,選擇優(yōu)先級(jí):list≈ \approx≈deque>numpy array;
  • 長(zhǎng)度<9000左右,選擇優(yōu)先級(jí):list>deque>numpy array;
  • 長(zhǎng)度>9000左右,選擇優(yōu)先級(jí):list>numpy array>deque;

不過(guò)時(shí)間上的差距都不大,幾乎可以忽略,差距主要體現(xiàn)在內(nèi)存占用上。因此如果對(duì)內(nèi)存不敏感,list是最好選擇。

整個(gè)實(shí)驗(yàn)使用i7-9700,耗時(shí)2.0 時(shí) 36.0分20.27秒,如果有人愿意嘗試更大的量級(jí),更小的間隔,歡迎告知我結(jié)果。

添加效率比較

numpy的數(shù)組沒(méi)有動(dòng)態(tài)改變大小的功能,因此這里numpy數(shù)據(jù)只是對(duì)其進(jìn)行賦值。

import numpy as np
import time
from collections import deque

l = 10000000
a = []
b = np.zeros(l)
c = deque(maxlen=l)
for i in range(3):
    if i == 0:
        tmp = a
        name = 'list'
    elif i == 1:
        tmp = b
        name = 'array'
    else:
        tmp = c
        name = 'deque'

    start = time.time()
    if name == 'array':
        for j in range(l):
            tmp[j] = 1
    else:
        for j in range(l):
            tmp.append(1)
    duration = time.time() - start
    time_list = [0, 0, 0]
    time_list[0] = duration // 3600
    time_list[1] = (duration % 3600) // 60
    time_list[2] = round(duration % 60, 2)
    print(name + '用時(shí):' + str(time_list[0]) + ' 時(shí) ' + str(time_list[1]) + '分' + str(time_list[2]) + '秒')

結(jié)果為:

list用時(shí):0.0 時(shí) 0.0分1.0秒
array用時(shí):0.0 時(shí) 0.0分1.14秒
deque用時(shí):0.0 時(shí) 0.0分0.99秒

可以看出,只有在非常大的量級(jí)上才會(huì)出現(xiàn)區(qū)別,numpy array的賦值是最慢的,list和deque差不多。

但平時(shí)這些差距幾乎可以忽略。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python解析HTML并提取span標(biāo)簽中的文本

    python解析HTML并提取span標(biāo)簽中的文本

    在網(wǎng)頁(yè)開(kāi)發(fā)和數(shù)據(jù)抓取過(guò)程中,我們經(jīng)常需要從HTML頁(yè)面中提取信息,尤其是span元素中的文本,span標(biāo)簽是一個(gè)行內(nèi)元素,通常用于包裝一小段文本或其他元素,在Python中,我們可以通過(guò)使用BeautifulSoup或lxml等庫(kù)來(lái)解析HTML并提取span標(biāo)簽中的文本
    2024-12-12
  • ActiveMQ:使用Python訪問(wèn)ActiveMQ的方法

    ActiveMQ:使用Python訪問(wèn)ActiveMQ的方法

    今天小編就為大家分享一篇ActiveMQ:使用Python訪問(wèn)ActiveMQ的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 在Python中執(zhí)行異常處理的基本步驟

    在Python中執(zhí)行異常處理的基本步驟

    異常處理是編寫(xiě)健壯、可靠和易于調(diào)試的Python代碼中不可或缺的一部分,下面這篇文章主要給大家介紹了關(guān)于在Python中執(zhí)行異常處理的基本步驟,需要的朋友可以參考下
    2024-08-08
  • 一文教會(huì)你用Python繪制動(dòng)態(tài)可視化圖表

    一文教會(huì)你用Python繪制動(dòng)態(tài)可視化圖表

    數(shù)據(jù)可視化是數(shù)據(jù)科學(xué)中關(guān)鍵的一步,下面這篇文章主要給大家介紹了關(guān)于如何利用Python繪制動(dòng)態(tài)可視化圖表的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟

    將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟

    這篇文章主要介紹了將Django項(xiàng)目遷移到linux系統(tǒng)的詳細(xì)步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 通過(guò)python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類(lèi)

    通過(guò)python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類(lèi)

    這篇文章主要介紹了通過(guò)python模糊匹配算法對(duì)兩個(gè)excel表格內(nèi)容歸類(lèi),比如兩個(gè)不同的工程項(xiàng)目針對(duì)的對(duì)象都是A,那么就需要將這兩個(gè)工程項(xiàng)目歸類(lèi)到A當(dāng)中,可以減少很大一部分工作量,,需要的朋友可以參考下
    2023-03-03
  • 淺談圖像處理中掩膜(mask)的意義

    淺談圖像處理中掩膜(mask)的意義

    今天小編就為大家分享一篇淺談圖像處理中掩膜(mask)的意義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢

    django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢

    這篇文章主要介紹了django 中的聚合函數(shù),分組函數(shù),F(xiàn) 查詢,Q查詢,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python3標(biāo)準(zhǔn)庫(kù)總結(jié)

    Python3標(biāo)準(zhǔn)庫(kù)總結(jié)

    在本篇內(nèi)容中我們給大家總結(jié)了關(guān)于Python3標(biāo)準(zhǔn)庫(kù)的相關(guān)內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-02-02
  • 對(duì)python中詞典的values值的修改或新增KEY詳解

    對(duì)python中詞典的values值的修改或新增KEY詳解

    今天小編就為大家分享一篇對(duì)python中詞典的values值的修改或新增KEY詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論

孟州市| 横山县| 顺义区| 巍山| 焉耆| 进贤县| 乌兰察布市| 九龙坡区| 云霄县| 长武县| 满洲里市| 尼木县| 恭城| 浮梁县| 巴彦县| 株洲市| 安泽县| 亳州市| 遂昌县| 巩义市| 汕头市| 名山县| 东方市| 江安县| 揭东县| 涟源市| 扎鲁特旗| 信丰县| 晋城| 阿克陶县| 定安县| 昌平区| 江门市| 大厂| 屏东县| 从江县| 古田县| 蒙山县| 安康市| 西乌| 林口县|