這篇文章將為大家詳細(xì)講解有關(guān)從Python到NumPy最接近人類思維的in操作是怎樣的,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)公司專注于企業(yè)成都全網(wǎng)營(yíng)銷、網(wǎng)站重做改版、河池網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為河池等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
在Python語(yǔ)言中,in是一個(gè)使用頻率非常高的操作符,用于判斷對(duì)象是否位于字符串、元組、列表、集合或字典中。in操作和人的思維方式高度吻合,寫起來(lái)近乎于自然語(yǔ)言,充分體現(xiàn)了Python的哲學(xué)理念。
>>> 'or' in 'hello world' True >>> 5 in {1,2,3,4} False >>> 'age' in {'name':'Mike', 'age':18} True
有趣的是,除了R、javascript、SQL外,包括C/C++在內(nèi)的主流語(yǔ)言幾乎都不支持in操作。這或許可以解釋為什么Python語(yǔ)言被認(rèn)為是最容易學(xué)習(xí)的編程語(yǔ)言。
習(xí)慣了使用Python的in操作符,有時(shí)就會(huì)自然而然地應(yīng)用到NumPy數(shù)組操作上。比如,下面的寫法看起來(lái)沒有任何問題。
>>> import numpy as np >>> a = np.arange(9) >>> a array([0, 1, 2, 3, 4, 5, 6, 7, 8]) >>> 5 in a True >>> 10 in a False
不過,當(dāng)我嘗試在np.where()函數(shù)中使用in操作符的時(shí)候,出現(xiàn)了意外。
>>> np.where(a>5) (array([6, 7, 8], dtype=int64),) >>> np.where(a%2==0) (array([0, 2, 4, 6, 8], dtype=int64),) >>> np.where(a in [2,3,5,7]) Traceback (most recent call last): File "<pyshell#111>", line 1, in <module> np.where(a in [2,3,5,7]) ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
使用a>5或者a%2==0作為條件,np.where()函數(shù)沒有問題,但是,使用a in [2,3,5,7],np.where()就會(huì)拋出異常。即便寫成下面這樣,也不能得到期望的結(jié)果。
>>> np.where(a in np.array([2,3,5,7])) (array([], dtype=int64),)
難道NumPy不支持兩個(gè)數(shù)組之間的in操作嗎?不,強(qiáng)大到宇宙無(wú)敵的NumPy,怎么會(huì)不支持?jǐn)?shù)組之間的in操作呢?NumPy不但支持,而且支持得很好。
>>> p = np.array([2,3,5,7]) # 質(zhì)數(shù)數(shù)組 >>> np.in1d(a, p) # 返回a的每一個(gè)元素是否是質(zhì)數(shù)的布爾數(shù)組 array([False, False, True, True, False, True, False, True, False]) >>> np.where(np.in1d(a, p)) # 返回?cái)?shù)組a中質(zhì)數(shù)的索引序號(hào) (array([2, 3, 5, 7], dtype=int64),) >>> np.where(np.in1d(a, p), -1, a) # 返回?cái)?shù)組a中的質(zhì)數(shù)全部替換為-1的結(jié)果 array([ 0, 1, -1, -1, 4, -1, 6, -1, 8])
np.in1d()的參數(shù)如果是多維數(shù)組,將被自動(dòng)扁平化,且返回的布爾數(shù)組也是扁平化的一維數(shù)組。
>>> np.in1d(a.reshape((3,3)), p) array([False, False, True, True, False, True, False, True, False])
如果np.in1d()的參數(shù)是多維的,且期望返回和原數(shù)組結(jié)構(gòu)相同的布爾數(shù)組,則應(yīng)使用np.isin()函數(shù)。
>>> np.isin(a.reshape((3,3)), p) array([[False, False, True], [ True, False, True], [False, True, False]]) >>> np.where(np.isin(a.reshape((3,3)), p)) (array([0, 1, 1, 2], dtype=int64), array([2, 0, 2, 1], dtype=int64))
若是期望得到兩個(gè)數(shù)組的交集而不是交集元素的索引,下面兩種方式都可行。
>>> a[np.where(np.isin(a, p))] array([2, 3, 5, 7]) >>> np.intersect1d(a, p) array([2, 3, 5, 7])
第二種方式直接使用np.intersect1d()函數(shù)得到兩個(gè)數(shù)組的交集,且自動(dòng)排序。不過,我更喜歡第一種方式。
關(guān)于從Python到NumPy最接近人類思維的in操作是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前題目:從Python到NumPy最接近人類思維的in操作是怎樣的
文章出自:http://jinyejixie.com/article16/ijggdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、移動(dòng)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)