日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中乘法和除法_python – NumPy的性能:uint8对比浮动和乘法与除法?

發(fā)布時(shí)間:2024/1/23 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中乘法和除法_python – NumPy的性能:uint8对比浮动和乘法与除法? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我剛剛注意到,我的腳本的執(zhí)行時(shí)間幾乎減少了一半,只是將乘法更改為一個(gè)部門.

為了調(diào)查這個(gè),我寫了一個(gè)小例子:

import numpy as np

import timeit

# uint8 array

arr1 = np.random.randint(0, high=256, size=(100, 100), dtype=np.uint8)

# float32 array

arr2 = np.random.rand(100, 100).astype(np.float32)

arr2 *= 255.0

def arrmult(a):

"""

mult, read-write iterator

"""

b = a.copy()

for item in np.nditer(b, op_flags=["readwrite"]):

item[...] = (item + 5) * 0.5

def arrmult2(a):

"""

mult, index iterator

"""

b = a.copy()

for i, j in np.ndindex(b.shape):

b[i, j] = (b[i, j] + 5) * 0.5

def arrmult3(a):

"""

mult, vectorized

"""

b = a.copy()

b = (b + 5) * 0.5

def arrdiv(a):

"""

div, read-write iterator

"""

b = a.copy()

for item in np.nditer(b, op_flags=["readwrite"]):

item[...] = (item + 5) / 2

def arrdiv2(a):

"""

div, index iterator

"""

b = a.copy()

for i, j in np.ndindex(b.shape):

b[i, j] = (b[i, j] + 5) / 2

def arrdiv3(a):

"""

div, vectorized

"""

b = a.copy()

b = (b + 5) / 2

def print_time(name, t):

print("{: <10}: {: >6.4f}s".format(name, t))

timeit_iterations = 100

print("uint8 arrays")

print_time("arrmult", timeit.timeit("arrmult(arr1)", "from __main__ import arrmult, arr1", number=timeit_iterations))

print_time("arrmult2", timeit.timeit("arrmult2(arr1)", "from __main__ import arrmult2, arr1", number=timeit_iterations))

print_time("arrmult3", timeit.timeit("arrmult3(arr1)", "from __main__ import arrmult3, arr1", number=timeit_iterations))

print_time("arrdiv", timeit.timeit("arrdiv(arr1)", "from __main__ import arrdiv, arr1", number=timeit_iterations))

print_time("arrdiv2", timeit.timeit("arrdiv2(arr1)", "from __main__ import arrdiv2, arr1", number=timeit_iterations))

print_time("arrdiv3", timeit.timeit("arrdiv3(arr1)", "from __main__ import arrdiv3, arr1", number=timeit_iterations))

print("\nfloat32 arrays")

print_time("arrmult", timeit.timeit("arrmult(arr2)", "from __main__ import arrmult, arr2", number=timeit_iterations))

print_time("arrmult2", timeit.timeit("arrmult2(arr2)", "from __main__ import arrmult2, arr2", number=timeit_iterations))

print_time("arrmult3", timeit.timeit("arrmult3(arr2)", "from __main__ import arrmult3, arr2", number=timeit_iterations))

print_time("arrdiv", timeit.timeit("arrdiv(arr2)", "from __main__ import arrdiv, arr2", number=timeit_iterations))

print_time("arrdiv2", timeit.timeit("arrdiv2(arr2)", "from __main__ import arrdiv2, arr2", number=timeit_iterations))

print_time("arrdiv3", timeit.timeit("arrdiv3(arr2)", "from __main__ import arrdiv3, arr2", number=timeit_iterations))

這將打印以下時(shí)間:

uint8 arrays

arrmult : 2.2004s

arrmult2 : 3.0589s

arrmult3 : 0.0014s

arrdiv : 1.1540s

arrdiv2 : 2.0780s

arrdiv3 : 0.0027s

float32 arrays

arrmult : 1.2708s

arrmult2 : 2.4120s

arrmult3 : 0.0009s

arrdiv : 1.5771s

arrdiv2 : 2.3843s

arrdiv3 : 0.0009s

我一直認(rèn)為乘法在計(jì)算上比分部便宜.然而,對于uint8,一個(gè)部門似乎幾乎是有效的兩倍.這是否與事實(shí)有關(guān),* 0.5必須計(jì)算浮點(diǎn)數(shù)中的乘法,然后將結(jié)果轉(zhuǎn)換為整數(shù)?

至少對于浮標(biāo),乘法似乎比分裂更快.這一般是正確的嗎?

為什么uint8中的乘法比float32中的乘法更多?我認(rèn)為一個(gè)8位無符號整數(shù)應(yīng)該比32位浮點(diǎn)計(jì)算快得多嗎?

有人可以“神秘化”嗎?

編輯:有更多的數(shù)據(jù),我已經(jīng)包括向量化函數(shù)(如建議)和添加的索引迭代器.矢量化的功能要快得多,因此并不是真正的可比性.然而,如果向量化函數(shù)的timeit_iterations設(shè)置得高得多,則結(jié)果是uint8和float32的乘法更快.我想這更混淆了嗎?

實(shí)際上,乘法總是比劃分更快,但是for循環(huán)中的主要性能泄漏不是算術(shù)運(yùn)算,而是循環(huán)本身.盡管這不能解釋為什么循環(huán)對于不同的操作有不同的表現(xiàn).

EDIT2:像@jotasi已經(jīng)說過,我們正在尋找一個(gè)完整的分解與乘法和int(或uint8)與float(或float32)的解釋.另外,解釋向量化方法和迭代器的不同趨勢將是有趣的,如在矢量化的情況下,分割似乎更慢,而在迭代器情況下更快.

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的python中乘法和除法_python – NumPy的性能:uint8对比浮动和乘法与除法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。