Python Numpy-數組的常用函數

2021-01-11 Python數據分析札記

       日常使用numpy進行數據分析的時候,通常會使用模塊提供的函數,很大程度上方便了對於數據的操作。下面介紹一些常用的數組操作函數和統計函數。

將數組變形,參數是一個tuple。注意:數組元素總數要一致。
import numpy as np
arr = np.random.randint(1, 100, size=(4, 6))print(arr)>>>[[34 92 83 55 73 65] [89 51 59 52 34 3] [17 82 24 2 5 36] [48 94 60 43 2 89]]
arr1 = arr.reshape((2, 3, 4))print(arr1)>>>[[[85 32 1 52] [36 68 68 76] [ 1 36 97 6]]
[[70 30 79 95] [ 5 47 42 73] [60 92 93 36]]]

2、concatenate函數

concatenate() 級聯需要注意的點:

1、級聯的參數是列表:一定要加中括號或者小括號

2、維度必須相同

3、形狀相符

4、【重點】級聯的方向默認是shape這個tuple的第一個值所代表的維度方向

5、可通過axis參數來改變級聯的方向

示例1:垂直級聯 axis=0

import numpy as np
arr1 = np.random.randint(1, 100, size=(2, 5))arr2 = np.random.randint(1, 100, size=(2, 5))arr3 = np.random.randint(1, 100, size=(2, 5))
arr = np.concatenate((arr1, arr2, arr3), axis=0)
print(arr)>>>[[92 15 64 91 52] [43 60 29 57 51] [39 35 66 49 97] [56 89 80 54 57] [41 10 76 44 51] [97 84 76 46 32]]

示例2:水平級聯 axis=1

import numpy as np
arr1 = np.random.randint(1, 100, size=(2, 5))arr2 = np.random.randint(1, 100, size=(2, 5))arr3 = np.random.randint(1, 100, size=(2, 5))
arr = np.concatenate((arr1, arr2, arr3), axis=1)
print(arr)>>>[[80 26 91 43 49 32 1 80 32 46 78 65 14 62 84] [22 61 77 9 10 82 42 82 37 1 28 11 89 46 67]]

3、hstack函數和vstack函數

實現跟concatenate函數一樣的功能

import numpy as np
arr1 = np.random.randint(1, 100, size=(2, 5))arr2 = np.random.randint(1, 100, size=(2, 5))arr3 = np.random.randint(1, 100, size=(2, 5))
arr = np.vstack((arr1, arr2, arr3))
print(arr)>>>[[47 70 89 32 17] [83 78 50 85 23] [ 5 51 33 68 65] [ 8 50 94 82 11] [21 17 37 42 69] [37 74 61 40 53]]

示例2:hstack():水平級聯

import numpy as np
arr1 = np.random.randint(1, 100, size=(2, 5))arr2 = np.random.randint(1, 100, size=(2, 5))arr3 = np.random.randint(1, 100, size=(2, 5))
arr = np.hstack((arr1, arr2, arr3))
print(arr)
>>>[[47 77 41 94 63 28 60 80 54 12 81 68 73 96 77] [47 33 6 87 34 49 33 26 45 24 82 96 72 74 58]]

4、split函數、vsplit函數和hsplit函數

np.split(ary, indices_or_sections, axis=0)   indices_or_sections是需要分成幾份

vsplit函數豎直方向 axis=0

hsplit函數水平方向 axis=1

示例1:平均切分

import numpy as np
arr = np.random.randint(1,100,size=(6,5))print(arr)
>>>array([[12, 88, 38, 77, 24],[54, 71, 17, 55, 30],[36, 45, 87, 68, 25],[35, 24, 96, 9, 35],[75, 15, 13, 97, 77],[72, 81, 84, 57, 17]])
np.split(arr,indices_or_sections=2,axis=0) # 按照垂直的方向切成兩份
>>>[array([[12, 88, 38, 77, 24],[54, 71, 17, 55, 30],[36, 45, 87, 68, 25]]), array([[35, 24, 96, 9, 35], [75, 15, 13, 97, 77], [72, 81, 84, 57, 17]])]

示例2:按需求切分

import numpy as np
arr = np.random.randint(1,100,size=(6,5))print(arr)
>>>array([[12, 88, 38, 77, 24], [54, 71, 17, 55, 30], [36, 45, 87, 68, 25], [35, 24, 96, 9, 35], [75, 15, 13, 97, 77], [72, 81, 84, 57, 17]])
np.split(arr,indices_or_sections=[1,3,4],axis=0) # 按垂直的方向在1,3,4處各分一次
>>>[array([[12, 88, 38, 77, 24]]), array([[54, 71, 17, 55, 30], [36, 45, 87, 68, 25]]), array([[35, 24, 96, 9, 35]]), array([[75, 15, 13, 97, 77], [72, 81, 84, 57, 17]])]

5、sum函數、max函數和min函數

示例1:

import numpy as np
arr = np.random.randint(1,100,size=(6,5))print(arr)
>>>array([[12, 88, 38, 77, 24], [54, 71, 17, 55, 30], [36, 45, 87, 68, 25], [35, 24, 96, 9, 35], [75, 15, 13, 97, 77], [72, 81, 84, 57, 17]])
arr.sum()>>>1514

示例2:

import numpy as np
arr = np.random.randint(1,100,size=(6,5))print(arr)
>>>array([[12, 88, 38, 77, 24], [54, 71, 17, 55, 30], [36, 45, 87, 68, 25], [35, 24, 96, 9, 35], [75, 15, 13, 97, 77], [72, 81, 84, 57, 17]])
arr.max()97

示例3:

import numpy as np
arr = np.random.randint(1,100,size=(6,5))print(arr)
>>>array([[12, 88, 38, 77, 24], [54, 71, 17, 55, 30], [36, 45, 87, 68, 25], [35, 24, 96, 9, 35], [75, 15, 13, 97, 77], [72, 81, 84, 57, 17]])
arr.min()9

6、prod累乘函數、power冪運算、cumsum累加函數

import numpy as np
arr = np.random.randint(1,10,size=(2,5))print(arr)
>>>[[5 5 1 4 3] [6 3 2 1 7]]
arr.prod()>>>75600
arr.prod(axis=0) # 垂直方向上累乘>>>array([30, 15, 2, 4, 21])

示例2:

import numpy as np
arr1 = np.random.randint(0,10,size=(2,5))arr2 = np.random.randint(0,10,size=(1,5))display(arr1,arr2)
>>>array([[5, 0, 2, 5, 5], [3, 2, 1, 1, 8]])array([[1, 4, 9, 6, 8]])
np.power(arr1, 2) # arr1中的每一個元素都進行平方>>>array([[25, 0, 4, 25, 25], [ 9, 4, 1, 1, 64]], dtype=int32)
np.power(arr1,arr2) # arr2中的每個數都是arr1中每一行的元素的冪>>>array([[5, 0, 512, 15625, 390625],       [3, 16,1, 1, 16777216]], dtype=int32)

示例3:

import numpy as np
arr = np.random.randint(0,10,size=(2,5))arr>>>array([[6, 7, 4, 6, 8], [3, 7, 8, 5, 1]])
arr.cumsum() # 累加>>>array([ 6, 13, 17, 23, 31, 34, 41, 49, 54, 55], dtype=int32)

示例:

import numpy as np
arr = np.random.randint(1,10,size=(2,5))print(arr)>>>[[6 9 3 6 3] [9 8 4 8 2]]
arr.mean() # 平均數>>>5.8
arr.var() # 方差>>>6.360000000000001
arr.std() # 標準差>>>2.5219040425836985

注意:這些函數也都可以通過傳入參數axis來計算垂直方向或者水平方向的值

8、argmax函數、argmin函數和argwhere函數

argmax函數是返回最大值的索引,argmin函數是返回最小值的索引,都可以傳入參數axis。

argwhere函數可以篩選響應條件的值返回索引

示例1:

import numpy as np
arr = np.random.randint(1,100,size=(2,5))print(arr)
>>>[[60 74 8 34 30] [92 34 11 78 37]]
arr.argmax() # 返回最大值得索引>>>5 #最大值得索引為5即第6個元素92
arr.argmax(axis=1) # 返回水平方向上最大值的索引>>>array([1, 0], dtype=int64) # 第一行最大值得索引為1即第2個元素74;第二行最大值得索引為0即第1個元素92
np.argwhere(arr>50) # 返回大於50元素的索引,運行結果共有4個值>>>array([[0, 0], [0, 1], [1, 0], [1, 3]], dtype=int64)
index = np.argwhere(arr>50)for x,y in index: # 根據索引把數據都取出來 print(arr[x,y])>>>60749278

9、ravel函數、median中位數函數、percentile函數

ravel函數將多維數組變成一維數組

median函數,中位數將數據從小到大排列,選取正中間的數

percentile函數是計算一個多維數組的任意百分比分位數,此處的百分位是從小到大排列

示例1:

import numpy as np
arr = np.random.randint(1,100,size=(4,5))print(arr)
>>>[[62 99 4 1 8] [53 25 41 78 13] [11 72 75 91 44] [80 49 6 15 17]]
arr1 = arr.ravel()arr1>>>array([62, 99, 4, 1, 8, 53, 25, 41, 78, 13, 11, 72, 75, 91, 44, 80, 49,6, 15, 17])
np.median(arr1) # 個數非奇數時,就計算正中間兩個數的平均值>>>42.5
np.percentile(arr1,q=50) # 從小到大排列後,計算50%分位的值>>>42.5

10、any函數、all函數

any函數有一個為True則為True,all函數所有都為True才為True

import numpy as np
arr = np.random.randint(0,10,size=(2,5))print(arr)
>>> # 裡面包含了0[[0 8 2 9 1] [5 3 1 7 4]]
arr.any() # 有一個為True,即為True>>>True
arr.all() # 元素中的0為FALSE,則為False>>>False

11、相關性函數:

corrcoef(x[, y, rowvar, bias, ddof])          返回皮爾遜積矩相關係數。

correlate(a,v[, mode])        兩個一維序列的互相關。

cov(m[, y, rowvar, bias, ddof, fweights, …])給定數據和權重,估計協方差矩陣。

皮爾遜相關係數的變化範圍為-1到1。係數大於0說明呈現正相關,越接近1月說明兩者相關性越強,值為1意味著兩者可以很好的由直線方程來描述,所有的數據點都很好的落在一條直線上。係數大於0說明呈現負相關,越接近-1月說明兩者相關性越強,值為−1意味著所有的數據點都落在直線上,且隨著的增加而減少。係數的值為0意味著兩個變量之間沒有線性關係。

示例:

import numpy as np
arr1 = np.random.randint(0,50,size=10)arr2 = arr1+np.random.randint(1,10,size=10)display(arr1,arr2)
>>>array([27, 15, 29, 3, 0, 9, 32, 49, 12, 43])array([31, 19, 38, 9, 6, 16, 36, 52, 13, 45])
np.corrcoef(arr1,arr2)
>>>array([[1. , 0.9899458], [0.9899458, 1. ]])

直方圖統計數據出現的頻次

示例:

import numpy as np
arr = np.random.randint(0,50,size=100)arr
>>>array([10, 23, 3, 34, 44, 9, 14, 20, 29, 45, 2, 30, 30, 31, 14, 34, 12, 26, 49, 37, 48, 19, 28, 35, 19, 38, 37, 49, 26, 3, 9, 46, 13, 17, 5, 18, 46, 27, 20, 42, 44, 2, 12, 39, 43, 6, 43, 14, 32, 33, 20, 16, 2, 36, 46, 35, 48, 26, 7, 13, 0, 25, 2, 25, 23, 48, 31, 24, 25, 27, 18, 12, 39, 26, 34, 47, 0, 16, 1, 6, 41, 47, 11, 7, 15, 32, 13, 40, 27, 3, 37, 40, 22, 1, 34, 25, 4, 32, 26, 15])
np.histogram(arr,bins=10) >>>(array([12, 7, 11, 9, 7, 14, 12, 9, 8, 11], dtype=int64), array([ 0. , 4.9, 9.8, 14.7, 19.6, 24.5, 29.4, 34.3, 39.2, 44.1, 49. ]))

說明:運行出來的結果表示,在0-4.9之間出現了12次,4.9-9.8出現了7次,9.8-14.7出現了9次。。。       除了介紹的這些之外,還有非常多的函數,也比較常用,比如np.pi、np.log()、np.exp()、np.sin()、np.cos()、np.NAN、np.nanvar()、np.savetxt()、np.loadtxt()等等,可以去Numpy的官網https://www.numpy.org.cn/去完整的學習一下。

相關焦點

  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    詳細細節請參考:python使用ctypes模塊調用DLL函數之傳遞數值、指針與字符串參數、Python使用ctypes模塊調用DLL函數之傳遞結構體參數這次講一下在Python中使用ctypes模塊調用DLL中的庫函數傳遞數組參數的情況。
  • D02 Numpy常用函數,如何優雅的遍歷一個多維數組?
    title: D02|Numpy常用函數author: Adolph Leecategories: 數據挖掘基礎tags:Python數據挖掘基礎Numpy如何遍歷一個數組,使用嵌套for循環嗎?當我們想要遍歷一個多維數組的時候,如果通過不停的使用循環去遍歷,這會讓我們的代碼可讀性與性能都變得很差,numpy提供了一個函數nditer,以幫助我們遍歷數組。nditer的入參是一個數組,返回值是一個可迭代對象。nditer 默認會優先遍歷行序,通過order參數可以使其優先遍歷列序。
  • Python入門教程(二):Numpy數組基礎
    import numpy as npnp.random.seed(0)  # 設置隨機種子數,保證程序執行時每次都可以生成同樣的隨機數組x1 = np.random.randint(10, size=6)  # 一維數組x2 = np.random.randint(10, size=(3, 4))  # 二維數組,創建三行四列的數組
  • Python的武器庫05:numpy模塊(下)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。
  • 好程式設計師Python培訓分享numpy簡介
    好程式設計師Python培訓分享numpy簡介:一、numpy簡介:NumPy是一個功能強大的Python庫,主要用於對多維數組執行計算。NumPy這個詞來源於兩個單詞-- Numerical和Python。NumPy提供了大量的庫函數和操作,可以幫助程式設計師輕鬆地進行數值計算。
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    【每天幾分鐘,從零入門python編程的世界!】上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。
  • 如果不懂Numpy,請別說自己是Python程式設計師
    幸運的是,後來我遇到了 numpy 這個神器。numpy 是 python 科學計算的基礎軟體包,提供多了維數組對象,多種派生對象(掩碼數組、矩陣等)以及用於快速操作數組的函數及 API,它包括數學、邏輯、數組形狀變換、排序、選擇、I/O 、離散傅立葉變換、基本線性代數、基本統計運算、隨機模擬等等。
  • NumPy ndarray數組的創建
    下面將介紹Numpy的一些常用方法,尤其是與機器學習、深度學習相關的一些內容。NumPy 封裝了一個新的數據類型 ndarray(N-dimensional Array),它是一個多維數組對象。該對象封裝了許多常用的數學運算函數,方便我們做數據處理、數據分析等。那麼,如何生成 ndarray 呢?
  • Python使用ctypes模塊調用DLL函數之複數數組的參數傳遞
    這次的例子運行環境配置如下:① 作業系統:win7 64位② Python版本:python2.7.14③ 函數約定的調用方式:C調用(cdecl)方式。下面給出具體的實現過程。函數說明在DLL文件(MyDLL.dll)中設計一個函數ComplexArrayFunc,其功能是,對於輸入長度為n的複數數組x,將x數組中的每個複數元素的實部和虛部進行交換,得到同樣長度的複數數組y。該函數的聲明如下圖所示:函數ComplexArrayFunc的具體C語言實現代碼如下:下面給出Python中轉為numpy數組的調用方法。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    list VS ndarraynumpy 的核心是 ndarray 對象(numpy 數組),它封裝了 python 原生的同數據類型的 n 維數組(python 數組)。numpy 數組和 python 數組之間有幾個重要的區別:numpy 數組一旦創建,其元素數量就不能再改變了。增刪 ndarray 元素的操作,意味著創建一個新數組並刪除原來的數組。
  • Python數據分析之numpy數組全解析
    1 什麼是numpy2 numpy數組創建2.1 基本方法:np.array()2.2 通用方法:np.ones()、np.zeros()、np.eye()2.3 讀取外部數據3 numpy中數組的數據類型4 numpy中數組的形狀5 索引與切片5.1 按索引取值
  • python數據科學系列:numpy入門詳細教程
    本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。本文知識要點一級菜單numpy:numerical python縮寫,提供了底層基於C語言實現的數值計算庫,與python內置的list和array數據結構相比,其支持更加規範的數據類型和極其豐富的操作接口,速度也更快num
  • Python學習第114課——numpy中ndarray的四則運算
    【每天幾分鐘,從零入門python編程的世界!】我們為什麼要學習numpy?numpy其實就是number+Python的簡寫,意思就是通過Python對數據進行處理。要對數據進行處理,就少不了最基本的加減乘除等操作。
  • Python:一篇文章掌握Numpy的基本用法
    本文主要內容如下:Numpy數組對象創建ndarray數組Numpy的數值類型ndarray數組的屬性ndarray數組的切片和索引處理數組形狀數組的類型轉換numpy常用統計函數數組的廣播1 Numpy數組對象Numpy中的多維數組稱為ndarray
  • Python編程:如何規範numpy中數組元素的列印輸出格式
    引言對於Python語言開發者,如果你經常處理大量數據運算的話,numpy是一個必不可少的程序擴展庫,它支持大維度數組與矩陣運算,提供了非常豐富的數學運算函數,並且,相對於Python自身提供的列表類型,它在運算速度上有著無與倫比的優勢。
  • Python中的Numpy基礎20問
    import numpy as np# 創建二維數組x2 = np.array([[1,2,3],[4,5,6]])# 將x2轉換為三維數組,並且自定義每個軸的元素數量x2.resize((1,2,3))x2'''輸出:array([[[1, 2, 3],[4, 5, 6]]])'''如何對數組進行索引和切片操作?numpy一維數組的索引和切片操作類似python列表,這裡不多講。
  • Python的武器庫04:numpy模塊(上)
    說到程式語言python,有一個著名的格言"餘生太短,只用python"。如果要分析為什麼會存在這麼一句格言?python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。
  • python機器學習:常用庫的介紹及安裝
    如:我要安裝Numpy庫,那麼我就可以打開Anaconda的DOS界面,輸入「pip install numpy"即可下載安裝對應的庫了。這裡需要下載後安裝,所以在安裝新庫的時候要保證網絡是接通的,否則無法下載安裝。
  • Numpy基礎,一位Python大神的筆記,看了後我連Matlab都學會了!
    常用矩陣函數同樣地,numpy中也定義了許多函數,使用這些函數可以將函數作用於矩陣中的每個元素。 表格中默認導入了numpy模塊,即 import numpy as np 。常用矩陣函數說明np.sin(a)對矩陣a中每個元素取正弦,sin(x)np.cos(a)對矩陣a中每個元素取餘弦,cos(x)np.tan(a)對矩陣a中每個元素取正切,tan(x)np.arcsin(a)對矩陣a中每個元素取反正弦,arcsin(x)np.arccos(a)對矩陣a中每個元素取反餘弦,arccos(x)np.arctan(a)對矩陣a中每個元素取反正切,arctan
  • Python學習第113課——numpy中用條件判斷去篩選數組中的元素
    【每天幾分鐘,從零入門python編程的世界!】之前我們學習了如何在numpy中查找數組元素的方法和技巧,現在我們學習如何用條件判斷的方式篩選數組的元素。●numpy中的數組可以直接進行比較直接上代碼:運行結果:我們看到,condition列印出來,它的結構和h的結構一樣。