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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

python

python中np没有定义_python中的np.empty_python – np.empty,np.zeros和np.one

發(fā)布時(shí)間:2023/12/13 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中np没有定义_python中的np.empty_python – np.empty,np.zeros和np.one 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我很好奇它使用

np.empty而不是

np.zeros實(shí)際上有多大差異,還有關(guān)于

np.ones的差異.我運(yùn)行這個(gè)小腳本來(lái)測(cè)試每個(gè)創(chuàng)建一個(gè)大型數(shù)組所需的時(shí)間:

import numpy as np

from timeit import timeit

N = 10_000_000

dtypes = [np.int8, np.int16, np.int32, np.int64,

np.uint8, np.uint16, np.uint32, np.uint64,

np.float16, np.float32, np.float64]

rep= 100

print(f'{"DType":8s} {"Empty":>10s} {"Zeros":>10s} {"Ones":>10s}')

for dtype in dtypes:

name = dtype.__name__

time_empty = timeit(lambda: np.empty(N, dtype=dtype), number=rep) / rep

time_zeros = timeit(lambda: np.zeros(N, dtype=dtype), number=rep) / rep

time_ones = timeit(lambda: np.ones(N, dtype=dtype), number=rep) / rep

print(f'{name:8s} {time_empty:10.2e} {time_zeros:10.2e} {time_ones:10.2e}')

并獲得下表:

DType Empty Zeros Ones

int8 1.39e-04 1.76e-04 5.27e-03

int16 3.72e-04 3.59e-04 1.09e-02

int32 5.85e-04 5.81e-04 2.16e-02

int64 1.28e-03 1.13e-03 3.98e-02

uint8 1.66e-04 1.62e-04 5.22e-03

uint16 2.79e-04 2.82e-04 9.49e-03

uint32 5.65e-04 5.20e-04 1.99e-02

uint64 1.16e-03 1.24e-03 4.18e-02

float16 3.21e-04 2.95e-04 1.06e-02

float32 6.31e-04 6.06e-04 2.32e-02

float64 1.18e-03 1.16e-03 4.85e-02

從中我提取了兩個(gè)有些令人驚訝的結(jié)論:

> np.empty和np.zeros的性能幾乎沒(méi)有區(qū)別,可能除了int8的一些差異.我不明白為什么會(huì)這樣.創(chuàng)建一個(gè)空數(shù)組應(yīng)該更快,實(shí)際上我已經(jīng)看到了這個(gè)的報(bào)告(例如Speed of np.empty vs np.zeros).

> np.zeros和np.ones之間有很大的不同.我懷疑這與內(nèi)存歸零的高性能方法有關(guān),不適用于用常量填充內(nèi)存區(qū)域,但我真的不知道如何或在什么級(jí)別這樣可行.

這些結(jié)果的解釋是什么?

我在Windows 10(使用MKL)上使用NumPy 1.15.4和Python 3.6 Anaconda,我有一個(gè)Intel Core i7-7700K CPU.

編輯:根據(jù)評(píng)論中的建議,我嘗試運(yùn)行基準(zhǔn)交錯(cuò)每個(gè)單獨(dú)的試驗(yàn)和最后的平均,但我看不出結(jié)果的顯著差異.但是,在相關(guān)的說(shuō)明中,我不知道NumPy中是否有任何機(jī)制可以重用剛剛刪除的數(shù)組的內(nèi)存,這會(huì)使這些措施變得不切實(shí)際(盡管時(shí)間似乎與數(shù)據(jù)類(lèi)型大小相關(guān))對(duì)于空數(shù)組).

最佳答案 這應(yīng)該是一個(gè)評(píng)論,但它不適合.這是腳本的一個(gè)小擴(kuò)展.有一些“手工制作”的零和一個(gè)版本.

import numpy as np

from timeit import timeit

N = 10_000_000

dtypes = [np.int8, np.int16, np.int32, np.int64,

np.uint8, np.uint16, np.uint32, np.uint64,

np.float16, np.float32, np.float64]

rep= 100

print(f'{"DType":8s} {"Empty":>10s} {"Zeros":>10s} {"Ones":>10s}')

for dtype in dtypes:

name = dtype.__name__

time_empty = timeit(lambda: np.empty(N, dtype=dtype), number=rep) / rep

time_zeros = timeit(lambda: np.zeros(N, dtype=dtype), number=rep) / rep

time_ones = timeit(lambda: np.ones(N, dtype=dtype), number=rep) / rep

time_full_zeros = timeit(lambda: np.full(N, 0, dtype=dtype), number=rep) / rep

time_full_ones = timeit(lambda: np.full(N, 1, dtype=dtype), number=rep) / rep

time_empty_zeros = timeit(lambda: np.copyto(np.empty(N, dtype=dtype), 0), number=rep) / rep

time_empty_ones = timeit(lambda: np.copyto(np.empty(N, dtype=dtype), 1), number=rep) / rep

print(f'{name:8s} {time_empty:10.2e} {time_zeros:10.2e} {time_ones:10.2e} {time_full_zeros:10.2e} {time_full_ones:10.2e} {time_empty_zeros:10.2e} {time_empty_ones:10.2e} ')

時(shí)間是暗示性的.

DType Empty Zeros Ones

int8 1.37e-06 6.33e-04 5.73e-04 5.76e-04 5.73e-04 6.05e-04 5.82e-04

int16 1.61e-06 1.55e-03 3.54e-03 3.54e-03 3.56e-03 3.54e-03 3.54e-03

int32 7.22e-06 6.99e-06 1.24e-02 1.20e-02 1.25e-02 1.19e-02 1.21e-02

int64 8.26e-06 8.06e-06 2.62e-02 2.64e-02 2.61e-02 2.62e-02 2.62e-02

uint8 1.32e-06 6.30e-04 5.85e-04 5.86e-04 5.77e-04 5.70e-04 5.83e-04

uint16 1.32e-06 1.63e-03 3.61e-03 3.65e-03 4.08e-03 4.08e-03 3.58e-03

uint32 7.08e-06 7.20e-06 1.48e-02 1.41e-02 1.63e-02 1.44e-02 1.32e-02

uint64 7.14e-06 7.13e-06 2.69e-02 2.67e-02 2.82e-02 2.68e-02 2.72e-02

float16 1.31e-06 1.55e-03 3.56e-03 3.79e-03 3.54e-03 3.53e-03 3.55e-03

float32 7.11e-06 6.95e-06 1.36e-02 1.35e-02 1.37e-02 1.35e-02 1.37e-02

float64 7.27e-06 7.33e-06 3.13e-02 3.00e-02 2.75e-02 2.80e-02 2.75e-02

重新零比我似乎記得的更快,正如評(píng)論中所建議的那樣,零確實(shí)使用了calloc,它是一個(gè)系統(tǒng)例程,其唯一目的是分配零塊,這可能是很好的.

總結(jié)

以上是生活随笔為你收集整理的python中np没有定义_python中的np.empty_python – np.empty,np.zeros和np.one的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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