第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

計(jì)算列表平均值的最快方法

計(jì)算列表平均值的最快方法

臨摹微笑 2022-06-02 10:10:09
我想找到計(jì)算 python 平均值的最快方法list。我有數(shù)百萬(wàn)個(gè)lists 存儲(chǔ)在 a 中dictionary,因此我正在尋找性能方面最有效的方法。參考這個(gè)問(wèn)題,如果l是浮點(diǎn)數(shù)列表,我有numpy.mean(l)sum(l) / float(len(l))reduce(lambda x, y: x + y, l) / len(l)哪種方式最快?
查看完整描述

2 回答

?
繁華開(kāi)滿天機(jī)

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊

正如@DeepSpace 所建議的那樣,您應(yīng)該嘗試自己回答這個(gè)問(wèn)題。您還可以考慮在使用之前將列表轉(zhuǎn)換為數(shù)組numpy.mean。使用%timeit如下ipython:


In [1]: import random

In [2]: import numpy

In [3]: from functools import reduce

In [4]: l = random.sample(range(0, 100), 50) # generates a random list of 50 elements

numpy.mean無(wú)需轉(zhuǎn)換為 np.array

In [5]: %timeit numpy.mean(l)

32.5 μs ± 2.82 μs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

numpy.mean轉(zhuǎn)換為 np.array

In [5]: a = numpy.array(a)

In [6]: %timeit numpy.mean(a)

17.6 μs ± 205 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

sum(l) / float(len(l))

In [5]: %timeit sum(l) / float(len(l)) # not required casting (float) in Python 3

774 ns ± 20.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

sum(l) / len(l)

In [5]: %timeit sum(l) / len(l)

623 ns ± 27.4 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

reduce

In [6]: reduce(lambda x, y: x + y, l) / len(l)

5.92 μs ± 514 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

從最慢到最快:

  1. numpy.mean(l)無(wú)需轉(zhuǎn)換為數(shù)組

  2. numpy.mean(a)將列表轉(zhuǎn)換為np.array

  3. reduce(lambda x, y: x + y, l) / len(l)

  4. sum(l) / float(len(l)), 這適用于 Python 2 和 3

  5. sum(l) / len(l)# 對(duì)于 Python 3,你不需要強(qiáng)制轉(zhuǎn)換(使用float


查看完整回答
反對(duì) 回復(fù) 2022-06-02
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

下午好,我剛剛對(duì)列表中的 10 個(gè)隨機(jī)浮點(diǎn)數(shù)進(jìn)行了測(cè)試,并進(jìn)行了時(shí)間測(cè)試,發(fā)現(xiàn) numpy 是最快的。


#!/usr/bin/python


import numpy as np

from functools import reduce

import time


l = [0.1, 2.3, 23.345, 0.9012, .002815, 8.2, 13.9, 0.4, 3.02, 10.1]


def test1():

    return np.mean(l)


def test2():

    return sum(l) / float(len(l))


def test3():

    return reduce(lambda x, y: x + y, l) / len(l)


def timed():

    start = time.time()

    test1()

    print('{} seconds'.format(time.time() - start))

    start = time.time()

    test2()

    print('{} seconds'.format(time.time() - start))

    start = time.time()

    test3()

    print('{} seconds'.format(time.time() - start))


timed()

與往常一樣,我確信有更好的方法可以做到這一點(diǎn),但這可以解決問(wèn)題。這是一個(gè)小列表:看看你在大列表中找到了什么會(huì)很有趣。


查看完整回答
反對(duì) 回復(fù) 2022-06-02
  • 2 回答
  • 0 關(guān)注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)