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

實例詳解Python中的numpy.abs和abs函數(shù)

 更新時間:2022年08月19日 14:56:19   作者:堯堯愛靜靜  
Numpy是python中最有用的工具之一,它可以有效地處理大容量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于Python中numpy.abs和abs函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下

說在最前

不知道小伙伴們在寫代碼的時候有沒有區(qū)分開numpy.abs和abs函數(shù),別小看這兩個函數(shù),如果在寫程序的時候正確區(qū)分使用這兩個函數(shù)可以使自己的程序運行效率大大提升。

別看這兩個函數(shù)都能對整數(shù)求絕對值,但他們倆的返回值類型完全不一樣,如果傻傻地混為一談,將會使你的程序運行時間被大大拖累!

今天筆者就帶小伙伴們看看,這兩個函數(shù)究竟該怎么正確使用才能使自己的程序運行效率得到提升。

先看示例程序-abs()函數(shù)

注意觀察變量row和語句temp=row-1

import time

row=-1000
row=abs(row)  #這里的函數(shù)是abs()

start_time = time.time()#記錄程序運行到這(記為A)的時間

for i in range(row):
    for j in range(1000):
        temp=row-1    #temp在這里只是用來接收row-1的結(jié)果

end_time = time.time()#記錄程序運行到這(記為B)的時間
print(end_time-start_time)#輸出A和B代碼間的程序運行時間

運行時間為:0.08079314231872559

再看示例程序-numpy.abs()函數(shù)

注意觀察變量row和語句temp=row-1

import numpy
import time

row=-1000
row=numpy.abs(row)   #這里的函數(shù)是numpy.abs()

start_time = time.time()#記錄程序運行到這(記為A)的時間

for i in range(row):
    for j in range(1000):
        temp=row-1    #temp在這里只是用來接收row-1的結(jié)果

end_time = time.time()#記錄程序運行到這(記為B)的時間
print(end_time-start_time)#輸出A和B代碼間的程序運行時間

運行時間為:0.20246124267578125

觀察兩個程序的結(jié)果

觀察兩個程序的相同代碼段運行時間的結(jié)果,你會發(fā)現(xiàn)作用都是用來取整的abs()函數(shù)和numpy.abs()函數(shù),運行時間竟然差了大約2.5倍!

小伙伴們看到這里是不是十分驚訝和不解?為什么相同的代碼段運行時間竟然大不相同?雖然在本文章中,它們的相同代碼段運行時間只差了0點幾秒,但是在做數(shù)據(jù)處理時,龐大的數(shù)據(jù)處理足足可以使這微小的差距瞬間拉大,造成本來可以幾秒鐘運行結(jié)束的程序你卻用了幾分鐘跑完的尷尬局面。

分析解釋

注意觀察兩個程序的變量row,

第一個程序

row=abs(row)

第二個程序

row=numpy.abs(row)

小伙伴們第一眼看好像這兩個函數(shù)除了外貌不同外,也沒啥不同,都是對變量row取絕對值,但是這兩個函數(shù)恰恰在返回值類型上不同。abs()函數(shù)返回的類型是int型而numpy.abs()函數(shù)返回的類型卻是ndarray。小伙伴們可以使用Type()函數(shù)來看變量row的類型,或者去numpy的官網(wǎng)看一下numpy.abs()函數(shù)的說明,鏈接附上:numpy.abs()函數(shù)官方說明

int類型這里不做過多解釋,有興趣的小伙伴可以自己去了解相關(guān)知識。

而ndarray類型,是numpy庫里的數(shù)組類型,它是numpy庫里的一種類(numpy.ndarray),小伙伴們可以去官網(wǎng)上看看有關(guān)ndarray類型的說明。鏈接附上:numpy.ndarray類型官方說明

有了上面的基礎(chǔ),我們再來理解為什么會出現(xiàn)相同代碼段運行時間不同就變得容易許多了。其主要原因在于

temp=row-1

這段代碼。如果row變量是ndarray類型,那么ndarray類型減去int類型(常量1是int類型)就會存在不同類型間的變量進(jìn)行轉(zhuǎn)換的問題(這種轉(zhuǎn)換是系統(tǒng)自己完成的,也可以稱之為隱藏式地轉(zhuǎn)換),這會使程序有額外的開銷,使程序的運行效率降低。而如果row變量是int類型就不會出現(xiàn)這種問題,所以這就是使兩段相同的代碼運行時間不同的根本原因所在。

另外numpy.abs()函數(shù)希望的參數(shù)類型是ndarray類型,而abs()函數(shù)希望的參數(shù)類型之一是int類型,所以numpy.abs(row)和abs(row)也存在上述問題。

拓展

雖然numpy.abs()函數(shù)對單個元素(整型、浮點型等等)的處理較abs()函數(shù)慢,但如果元素很多,可以把這些元素組合起來形成一個ndarray類型數(shù)組,這時使用numpy.abs()函數(shù)(ndarray類型做實際參數(shù))就要比用abs()函數(shù)循環(huán)處理快得多啦。

補(bǔ)充:numpy abs()報錯

我在用numpy的abs()給數(shù)組取絕對值的時候出現(xiàn)了這個問題,很明顯是dtype的問題

'<U32'是unsigned 32的含義,那么這個格式本來就沒有符號,我還非要取絕對值那肯定會報錯的呀!

回過頭去看了看果然是append進(jìn)數(shù)組的時候忘了把格式強(qiáng)轉(zhuǎn)成float了

OK!轉(zhuǎn)換!解決!

ufunc 'absolute' did not contain a loop with signature matching types dtype('<U32') dtype('<U32')

總結(jié)

單個元素用abs()函數(shù)

多個元素并行處理用numpy.abs()函數(shù)

使用函數(shù)和寫代碼時一定要注意變量隱藏式地轉(zhuǎn)換,因為這能在無形之中拖慢你程序的運行速度。

到此這篇關(guān)于Python中numpy.abs和abs函數(shù)的文章就介紹到這了,更多相關(guān)Python numpy.abs和abs函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python爬蟲scrapy框架之增量式爬蟲的示例代碼

    python爬蟲scrapy框架之增量式爬蟲的示例代碼

    這篇文章主要介紹了python爬蟲scrapy框架之增量式爬蟲的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • matplotlib.subplot()畫子圖并共享y坐標(biāo)軸的方法

    matplotlib.subplot()畫子圖并共享y坐標(biāo)軸的方法

    Matplotlib的可以把很多張圖畫到一個顯示界面,本文主要介紹matplotlib.subplot()畫子圖并共享y坐標(biāo)軸的方法,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Pytest框架 conftest.py文件的使用詳解

    Pytest框架 conftest.py文件的使用詳解

    conftest.py是pytest特有的本地測試配置文件,既可以用來設(shè)置項目級別的fixture,也可以用來導(dǎo)入外部插件,本文給大家介紹Pytest框架 conftest.py文件的使用,感興趣的朋友一起看看吧
    2022-06-06
  • python 實現(xiàn)單通道轉(zhuǎn)3通道

    python 實現(xiàn)單通道轉(zhuǎn)3通道

    今天小編就為大家分享一篇python 實現(xiàn)單通道轉(zhuǎn)3通道,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中字符串格式化的方法詳解

    Python中字符串格式化的方法詳解

    眾所周知,我們可以使用 print() 方法來輸出一個固定內(nèi)容的字符串,就像是 print("Hello, world!") 一樣,但是,在現(xiàn)實中,我們很多時候是需要輸出一些內(nèi)容不斷變化,或者內(nèi)容動態(tài)生成的字符串,本文將介紹如何按照需要,在Python中格式化一個字符串
    2023-10-10
  • 關(guān)于如何使用python的logging庫

    關(guān)于如何使用python的logging庫

    這篇文章主要介紹了關(guān)于如何使用python的logging庫,logging是Python標(biāo)準(zhǔn)庫中用于記錄日志的模塊。它提供了一種簡單但靈活的方法來記錄程序中的事件,以便稍后進(jìn)行調(diào)試和分析,需要的朋友可以參考下
    2023-04-04
  • Python解包中*和**的最全用法

    Python解包中*和**的最全用法

    本文主要介紹了Python解包中*和**的最全用法,它們具有多種用途,包括解包參數(shù)、擴(kuò)展序列、字典和集合操作等,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • OpenCV-Python圖像輪廓之輪廓特征詳解

    OpenCV-Python圖像輪廓之輪廓特征詳解

    圖像輪廓是指由位于邊緣、連續(xù)的、具有相同顏色和強(qiáng)度的點構(gòu)成的曲線,它可以用于形狀分析以及對象檢測和識別。本文將帶大家詳細(xì)了解一下圖像的輪廓特征,感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • Python使用getpass庫讀取密碼的示例

    Python使用getpass庫讀取密碼的示例

    本篇文章主要介紹了Python使用getpass庫讀取密碼的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • TensorFlow實現(xiàn)Batch Normalization

    TensorFlow實現(xiàn)Batch Normalization

    這篇文章主要為大家詳細(xì)介紹了TensorFlow實現(xiàn)Batch Normalization,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評論

博罗县| 隆德县| 沁源县| 周宁县| 昭苏县| 绥中县| 外汇| 库车县| 洛宁县| 阿鲁科尔沁旗| 灵台县| 二手房| 蒙阴县| 雷波县| 九台市| 通海县| 南平市| 乡城县| 嘉荫县| 乌鲁木齐县| 余干县| 崇阳县| 织金县| 龙南县| 阳江市| 万源市| 西峡县| 兴业县| 崇义县| 丰顺县| 三穗县| 易门县| 萨嘎县| 潞西市| 百色市| 河曲县| 新龙县| 龙里县| 松江区| 乌拉特后旗| 温宿县|