溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Numpy怎么使用比較有效率

發(fā)布時(shí)間:2021-06-21 15:27:37 來(lái)源:億速云 閱讀:149 作者:chen 欄目:編程語(yǔ)言

這篇文章主要介紹“Numpy怎么使用比較有效率”,在日常操作中,相信很多人在Numpy怎么使用比較有效率問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Numpy怎么使用比較有效率”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

在 reshape 函數(shù)中使用參數(shù)-1

Numpy 允許我們根據(jù)給定的新形狀重塑矩陣,新形狀應(yīng)該和原形狀兼容。有意思的是,我們可以將新形狀中的一個(gè)參數(shù)賦值為-1。這僅僅表明它是一個(gè)未知的維度,我們希望 Numpy 來(lái)算出這個(gè)未知的維度應(yīng)該是多少:Numpy 將通過(guò)查看數(shù)組的長(zhǎng)度和剩余維度來(lái)確保它滿足上述標(biāo)準(zhǔn)。讓我們來(lái)看以下例子:

Numpy怎么使用比較有效率

維度為-1 的不同 reshape 操作圖示。

a = np.array([[1, 2, 3, 4],                [5, 6, 7, 8]])  a.shape  (2, 4)

假設(shè)我們給定行參數(shù)為 1,列參數(shù)為-1,那么 Numpy 將計(jì)算出 reshape 后的列數(shù)為 8。

a.reshape(1,-1)  array([[1, 2, 3, 4, 5, 6, 7, 8]])

假設(shè)我們給定行參數(shù)為-1,列參數(shù)為 1,那么 Numpy 將計(jì)算出 reshape 后的行數(shù)為 8。

a.reshape(-1,1)  array([[1],         [2],         [3],         [4],         [5],         [6],         [7],         [8]])

下面的代碼也是一樣的道理。

a.reshape(-1,4)  array([[1, 2, 3, 4],         [5, 6, 7, 8]])a.reshape(-1,2)  array([[1, 2],         [3, 4],         [5, 6],         [7, 8]])a.reshape(2,-1)  array([[1, 2, 3, 4],         [5, 6, 7, 8]])a.reshape(4,-1)  array([[1, 2],         [3, 4],         [5, 6],         [7, 8]])

這也適用于任何更高維度張量的 reshape,但是只有一個(gè)維度的參數(shù)能賦值為-1。

a.reshape(2,2,-1)  array([[[1, 2],          [3, 4]],         [[5, 6],          [7, 8]]])a.reshape(2,-1,1)  array([[[1],          [2],          [3],          [4]],          [[5],          [6],          [7],          [8]]])

如果我們嘗試 reshape 不兼容的形狀或者是給定的未知維度參數(shù)多于 1 個(gè),那么將會(huì)報(bào)錯(cuò)。

a.reshape(-1,-1)  ValueError: can only specify one unknown dimensiona.reshape(3,-1)  ValueError: cannot reshape array of size 8 into shape (3,newaxis)

總而言之,當(dāng)試圖對(duì)一個(gè)張量進(jìn)行 reshape 操作時(shí),新的形狀必須包含與舊的形狀相同數(shù)量的元素,這意味著兩個(gè)形狀的維度乘積必須相等。當(dāng)使用 -1 參數(shù)時(shí),與-1 相對(duì)應(yīng)的維數(shù)將是原始數(shù)組的維數(shù)除以新形狀中已給出維數(shù)的乘積,以便維持相同數(shù)量的元素。

Argpartition:在數(shù)組中找到最大的 N 個(gè)元素。

Numpy怎么使用比較有效率

Numpy 的 argpartion 函數(shù)可以高效地找到 N 個(gè)最大值的索引并返回 N 個(gè)值。在給出索引后,我們可以根據(jù)需要進(jìn)行值排序。

array = np.array([10, 7, 4, 3, 2, 2, 5, 9, 0, 4, 6, 0])index = np.argpartition*(array, -5)[-5:]  index  array([ 6,  1, 10,  7,  0], dtype=int64)np.sort(array[index])  array([ 5,  6,  7,  9, 10])

Clip:如何使數(shù)組中的值保持在一定區(qū)間內(nèi)

在很多數(shù)據(jù)處理和算法中(比如強(qiáng)化學(xué)習(xí)中的 PPO),我們需要使得所有的值保持在一個(gè)上下限區(qū)間內(nèi)。Numpy 內(nèi)置的 Clip 函數(shù)可以解決這個(gè)問(wèn)題。Numpy clip () 函數(shù)用于對(duì)數(shù)組中的值進(jìn)行限制。給定一個(gè)區(qū)間范圍,區(qū)間范圍外的值將被截?cái)嗟絽^(qū)間的邊界上。例如,如果指定的區(qū)間是 [-1,1],小于-1 的值將變?yōu)?1,而大于 1 的值將變?yōu)?1。

Numpy怎么使用比較有效率

Clip 示例:限制數(shù)組中的最小值為 2,最大值為 6。

#Example-1  array = np.array([10, 7, 4, 3, 2, 2, 5, 9, 0, 4, 6, 0])  print (np.clip(array,2,6))[6 6 4 3 2 2 5 6 2 4 6 2]#Example-2  array = np.array([10, -1, 4, -3, 2, 2, 5, 9, 0, 4, 6, 0])  print (np.clip(array,2,5))[5 2 4 2 2 2 5 5 2 4 5 2]

Extract:從數(shù)組中提取符合條件的元素

我們可以使用 Numpy extract () 函數(shù)從數(shù)組中提取符合條件的特定元素。

Numpy怎么使用比較有效率

arr = np.arange(10)  arrarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])# Define the codition, here we take MOD 3 if zero  condition = np.mod(arr, 3)==0  conditionarray([ True, False, False,  True, False, False,  True, False, False,True])np.extract(condition, arr) array([0, 3, 6, 9])

同樣地,如果有需要,我們可以用 AND 和 OR 組合的直接條件,如下所示:

np.extract(((arr > 2) & (arr < 8)), arr)array([3, 4, 5, 6, 7])

setdiff1d:如何找到僅在 A 數(shù)組中有而 B 數(shù)組沒(méi)有的元素

返回?cái)?shù)組中不在另一個(gè)數(shù)組中的獨(dú)有元素。這等價(jià)于兩個(gè)數(shù)組元素集合的差集。

Numpy怎么使用比較有效率

a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])  b = np.array([3,4,7,6,7,8,11,12,14])  c = np.setdiff1d(a,b)  carray([1, 2, 5, 9])

小結(jié)

以上 5 個(gè) Numpy 函數(shù)并不經(jīng)常被社區(qū)使用,但是它們非常簡(jiǎn)潔和優(yōu)雅。在我看來(lái),我們應(yīng)該盡可能在出現(xiàn)類(lèi)似情況時(shí)使用這些函數(shù),不僅因?yàn)榇a量更少,更因?yàn)樗鼈兪墙鉀Q復(fù)雜問(wèn)題的絕妙方法。

到此,關(guān)于“Numpy怎么使用比較有效率”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI