<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          技巧 || NumPy高效使用的5個(gè)Tricks

          共 5285字,需瀏覽 11分鐘

           ·

          2021-04-13 16:22






          選自TowardsDataScience,作者:Baijayanta Roy

          轉(zhuǎn)自:機(jī)器之心


          本文作者將分享 5 個(gè)優(yōu)雅的 Python Numpy 函數(shù),有助于高效、簡(jiǎn)潔的數(shù)據(jù)處理。


          在 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)看以下例子: 


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


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

          假設(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)
          ValueErrorcan only specify one unknown dimensiona.reshape(3,-1)
          ValueErrorcannot 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 的 argpartion 函數(shù)可以高效地找到 N 個(gè)最大值的索引并返回 N 個(gè)值。在給出索引后,我們可以根據(jù)需要進(jìn)行值排序。

          array = np.array([1074322590460])index = np.argpartition*(array, -5)[-5:]
          index
          array([ 6,  110,  7,  0], dtype=int64)np.sort(array[index])
          array([ 5,  6,  7,  910])


          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。


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

          #Example-1
          array = np.array([1074322590460])
          print (np.clip(array,2,6))[6 6 4 3 2 2 5 6 2 4 6 2]#Example-2
          array = np.array([10-14-322590460])
          print (np.clip(array,2,5))[5 2 4 2 2 2 5 5 2 4 5 2]

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


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


          arr = np.arange(10)
          arrarray([0123456789])# Define the codition, here we take MOD 3 if zero
          condition = np.mod(arr, 3)==0
          conditionarray([ TrueFalseFalse,  TrueFalseFalse,  TrueFalseFalse,True])np.extract(condition, arr)
          array([0369])

          同樣地,如果有需要,我們可以用 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ù)組元素集合的差集。


          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)題的絕妙方法。


          原文鏈接:https://towardsdatascience.com/5-smart-python-numpy-functions-dfd1072d2cb4

          往期精彩:

          【原創(chuàng)首發(fā)】機(jī)器學(xué)習(xí)公式推導(dǎo)與代碼實(shí)現(xiàn)30講.pdf

          【原創(chuàng)首發(fā)】深度學(xué)習(xí)語(yǔ)義分割理論與實(shí)戰(zhàn)指南.pdf

           談中小企業(yè)算法崗面試

           算法工程師研發(fā)技能表

           真正想做算法的,不要害怕內(nèi)卷

           算法工程師的日常,一定不能脫離產(chǎn)業(yè)實(shí)踐

           技術(shù)學(xué)習(xí)不能眼高手低

           技術(shù)人要學(xué)會(huì)自我營(yíng)銷(xiāo)

           做人不能過(guò)擬合

          求個(gè)在看

          瀏覽 30
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美A片视频 | 仓井空一区二区三区 | 北条麻妃三级片 | 8x8x成人免费视频入口 | 大香蕉尹在线 |