自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)處理遇到麻煩不要慌,5個優(yōu)雅的Numpy函數(shù)助你走出困境

開發(fā) 開發(fā)工具 后端
在機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)工程的日常數(shù)據(jù)處理中,我們會遇到一些特殊的情況,需要用樣板代碼來解決這些問題。本文作者將分享5個優(yōu)雅的PythonNumpy函數(shù),有助于高效、簡潔的數(shù)據(jù)處理。

在機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)工程的日常數(shù)據(jù)處理中,我們會遇到一些特殊的情況,需要用樣板代碼來解決這些問題。在此期間,根據(jù)社區(qū)的需求和使用,一些樣板代碼已經(jīng)被轉(zhuǎn)換成核心語言或包本身提供的基本功能。本文作者將分享 5 個優(yōu)雅的 Python Numpy 函數(shù),有助于高效、簡潔的數(shù)據(jù)處理。

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

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

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

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

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

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

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

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

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

  1. a.reshape(-1,4) 
  2. array([[1, 2, 3, 4], 
  3.        [5, 6, 7, 8]])a.reshape(-1,2) 
  4. array([[1, 2], 
  5.        [3, 4], 
  6.        [5, 6], 
  7.        [7, 8]])a.reshape(2,-1) 
  8. array([[1, 2, 3, 4], 
  9.        [5, 6, 7, 8]])a.reshape(4,-1) 
  10. array([[1, 2], 
  11.        [3, 4], 
  12.        [5, 6], 
  13.        [7, 8]]) 

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

  1. a.reshape(2,2,-1) 
  2. array([[[1, 2], 
  3.         [3, 4]], 
  4.  
  5.        [[5, 6], 
  6.         [7, 8]]])a.reshape(2,-1,1) 
  7. array([[[1], 
  8.         [2], 
  9.         [3], 
  10.         [4]], 
  11.  
  12.        [[5], 
  13.         [6], 
  14.         [7], 
  15.         [8]]]) 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

返回數(shù)組中不在另一個數(shù)組中的獨有元素。這等價于兩個數(shù)組元素集合的差集。

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

小結(jié)

以上 5 個 Numpy 函數(shù)并不經(jīng)常被社區(qū)使用,但是它們非常簡潔和優(yōu)雅。在我看來,我們應(yīng)該盡可能在出現(xiàn)類似情況時使用這些函數(shù),不僅因為代碼量更少,更因為它們是解決復(fù)雜問題的絕妙方法。

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

【本文是51CTO專欄機(jī)構(gòu)“機(jī)器之心”的原創(chuàng)譯文,微信公眾號“機(jī)器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2021-03-16 10:12:24

python內(nèi)置函數(shù)

2021-01-15 09:52:51

代碼開發(fā)工具

2022-05-20 15:55:17

大數(shù)據(jù)醫(yī)保醫(yī)保管理

2025-01-07 13:58:08

SQL數(shù)據(jù)處理函數(shù)數(shù)據(jù)庫

2022-03-02 11:45:16

Python函數(shù)數(shù)據(jù)分析

2011-11-28 10:55:26

2012-06-10 17:31:55

無線網(wǎng)絡(luò)捷網(wǎng)絡(luò)

2023-03-30 10:22:42

數(shù)據(jù)處理前端

2018-08-24 10:28:41

大數(shù)據(jù)數(shù)據(jù)分析工具

2013-01-17 13:06:47

移動開發(fā)者營銷推廣

2017-07-26 17:45:05

2024-02-22 10:14:40

Filter函數(shù)Python

2023-03-24 16:41:36

Pandas技巧數(shù)據(jù)處理

2017-11-14 05:04:01

大數(shù)據(jù)編程語言數(shù)據(jù)分析

2017-11-02 13:20:08

數(shù)據(jù)處理PythonNumpy

2012-11-19 10:32:07

路由器ConsoleIP地址

2009-07-13 16:16:20

IT人員運維管理

2016-10-17 13:56:48

大數(shù)據(jù)大數(shù)據(jù)分析

2024-04-03 07:46:41

PythonReduce函數(shù)工具

2010-04-08 13:55:18

Oracle數(shù)據(jù)處理
點贊
收藏

51CTO技術(shù)棧公眾號