numpy詳細教程(涵蓋全部,看這一篇就夠了)
numpy詳細教程(涵蓋全部,看這一篇就夠了)-CSDN博客
numpy初識:
作為數據分析三劍客之一的numpy,只要用到python來進行數據分析,那numpy是必不可少的
NumPy,一言以蔽之,是Python中基于數組對象的科學計算庫。它是Python語言的一個擴展程序庫,支持大量的維度數組與矩陣運算,以及大量的數學函數庫。NumPy的核心是ndarray對象,它是一個功能強大的N維數組對象,封裝了n維同類數組。很多運算是由編譯過的代碼來執行的,以此來提高效率。
以下是NumPy的一些主要特點:
-
多維數組對象:NumPy的核心數據結構是
ndarray,它是一個多維數組,用于存儲同質數據類型的元素。這些數組可以是一維、二維、三維等,非常適用于向量化操作和矩陣運算。 -
廣播功能:NumPy允許在不同形狀的數組之間執行操作,通過廣播功能,它可以自動調整數組的形狀,以使操作變得有效。
-
豐富的數學函數:NumPy提供了大量的數學、統計和線性代數函數,包括基本的加減乘除、三角函數、指數和對數函數、隨機數生成、矩陣操作等。
-
索引和切片:NumPy允許使用索引和切片操作來訪問和修改數組中的元素,這使得數據的選擇和處理非常靈活。
-
高性能計算:NumPy的底層實現是用C語言編寫的,因此它在處理大規模數據時非常高效。此外,NumPy還與其他高性能計算庫(如BLAS和LAPACK)集成,提供了快速的線性代數運算。
-
互操作性:NumPy可以與許多其他Python庫和數據格式(例如Pandas、SciPy、Matplotlib)無縫集成,這使得數據科學工作流更加流暢。
NumPy的廣泛應用范圍包括數據處理、科學研究、機器學習、圖像處理、信號處理等各種領域。
它為數據分析人員、科學家和工程師提供了一個功能強大且高效的工具,以便進行數值計算和數據處理
安裝numpy
這里介紹anaconda命令行安裝方法
第一步,打開anaconda終端
第二步,創建虛擬環境
(已經創建好虛擬環境的可以直接到第四步)
conda create -n NumpyTest python=3.7
(NumTest為你要創建虛擬環境的名稱 ,后面為對應的版本,你想創建3.10的版本,后面就改為python=3.10)

第三步,輸入y安裝基礎包

第四步 切換至你創建的虛擬環境的目錄下
我這里創建的是虛擬環境的名字是NumpyTest,所以我切換至NumpyTest環境下
conda activate NumpyTest

第五步:安裝 numpy包
pip install numpy

有些小伙伴可能因為網絡問題安裝不了,可以切換至清華園鏡像,代碼也是很簡單的,我這里就不贅敘了
- 還缺啥包直接pip install 包名
- 在pycharm中加載該環境即可,創建的環境在anaconda\envs下面
創建數組
1.1創建一維數組
-
import numpy as np
-
data=np.array([1,2,3,4])
-
print(data)
1.2創建創建二維數組(矩陣)array
-
import numpy as np
-
data=np.array([[1,2,3,4],[4,5,6,7]])
-
print(data)
1.3創建全0數組
shape屬性代表形狀 shape(2,5) 就代表創建2行5列的全零數組
創建全零數組的用途是初始化一個具有特定形狀和大小的數組,其中所有元素都設置為0。在處理圖像或其他數據時,全零數組可以用作初始值或占位符。
例如,假設我們要讀取一個尺寸為(255,255,255)的圖片,我們可以創建一個相同維度的全零數組,然后將圖片讀入該數組進行填充。這樣做的好處是,我們可以直接將原始圖像數據存儲在全零數組中,而無需擔心數據溢出或其他問題。
-
import numpy as np
-
#shape代表形狀,比如我這里創建的就是5行三列的2維數組
-
data=np.zeros(shape=(5,3))
-
print(data)
1.4創建全1數組
創建全1數組的用途是初始化一個具有特定形狀和大小的數組,其中所有元素都設置為1。在處理一些數學問題或算法時,全1數組可以用作初始值或占位符。
例如,假設我們要計算一個矩陣與自身的轉置相乘的結果,我們可以創建一個與輸入矩陣相同維度的全1數組,然后將輸入矩陣讀入該數組進行填充。這樣做的好處是,我們可以直接將原始矩陣數據存儲在全1數組中,而無需擔心數據溢出或其他問題。
-
import numpy as np
-
#shape代表形狀,比如我這里創建的就是5行三列的2維數組
-
data=np.ones(shape=(5,3))
-
print(data)
1.5創建全空數組
創建出來的全空數組中的數據都是無限小的、無限接近于0但不是0,這方便我們數學上的一些操作
-
import numpy as np
-
#shape代表維度,比如我這里創建的就是5行三列的2維數組
-
data=np.empty(shape=(5,3))
-
print(data)
1.6 創建有連續序列的數組 arange
數組從10開始步長為2,所以創建出來數組元素就是10,12,14
-
import numpy as np
-
data = np.arange(10,16,2) # 10-16的數據,步長為2
-
print(data)
1.7 創建有連續間隔的數組 linspace
也可以稱為線性等分向量(linear space),在一個指定區間內按照指定的步長,將區間均等分,生成的是一個線段類型的數組。生成的線性間隔數據中,是有把區間的兩端加進去的
-
import numpy as np
-
# 創建線段型數據
-
data= np.linspace(1,10,20) # 開始端1,結束端10,且分割成20個數據,生成線段
-
print(data)
1.8創建隨機數組
創建隨機數組的用途是初始化一個具有特定形狀和大小的數組,其中所有元素都是隨機生成的。在處理一些需要模擬隨機數據的情況時,隨機數組可以用作占位符或測試數據。
-
import numpy as np
-
data = np.random.rand(3,4)
-
print(data)
這里我們還可以用另外一種方法創建數組,這種方法很靈活,也好用
這段代碼使用NumPy庫創建了一個4行5列的隨機整數數組,其中每個元素的值在2到5之間
-
import numpy as np
-
data=np.random.randint(2,5,size=(4,5));
-
print(data)
效果圖:

1.9改變數組形狀
這個怎么理解呢,比如說你本來有一個2行3列的數組,你可以把它改成為3行2列的數組
注意:因為數組中元素是沒有改變的,所以重塑數組指定的尺寸大小是否和原本的尺寸大小一樣,大一點和小一點都會報錯,2行3列的數組,你可以把它改成為3行2列的數組 ,或者1行6列,改后尺寸必須一樣,reshape本質就是原本數組中的元素按順序展開來,然后依次填入新定義的尺寸中去.注意 reshape后面填的是元組數據類型
-
import numpy as np
-
data1=[1,2,3,4,5]
-
data2=[1,2,3,4,5]
-
data=np.array([data1,data2])
-
print("改之前的數組形狀為:")
-
print(data.shape)
-
data=data.reshape((5,2))
-
print("改之后的數組形狀為:")
-
print(data.shape)
運行結果:

1.10數組轉置
-
import numpy as np
-
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
-
data_array = np.array(data)
-
print("沒有轉置數組之前數組為:")
-
print(data)
-
print("轉置數組之后數組為:")
-
print(data_array.T)
運行效果

數組顯示操作
2.1數組維度 ndim
ndim屬性代表數組維度
-
data = np.array([1,2,3])
-
print(data.ndim)
2.2數組形狀shape
shape屬性代表數組形狀,可以這么理解shape是各個方向的維度(ndim)
print(data.shape)
2.3數組中元素個數
print(data.size)
2.4 數組的數據類型 dtype
print(data.dtype)
數組的運算
這里簡單講兩個例子
數組加法
-
import numpy as np
-
array1 = np.array([1, 2, 3])
-
array2 = np.array([4, 5, 6])
-
result = array1 + array2
-
print(result)
數組乘法
-
result=array1*array2
-
print(result)
數組中的數據統計
數據統計大家有個印象就行,不要刻意的去記,用到的時候回來看一眼就可以了,多用也就會了
計算數組的平均值
numpy.mean(arr, axis=None, dtype=None, out=None): 計算數組的平均值。參數axis表示沿著哪個軸進行計算,默認為None,表示計算整個數組的平均值;dtype表示返回結果的數據類型,默認為float64;out表示將結果存儲在指定的數組中,一般情況下,傳個數組進去就可以了,其他的用默認的就好了,其它的方法也是一樣,我不贅述
-
import numpy as np
-
data=[1,5,6,9]
-
mindle=np.mean(data)
-
print(mindle)
計算數組的中位數
numpy.median(arr, axis=None, out=None): 計算數組的中位數。參數axis和out的含義與numpy.mean()相同
-
import numpy as np
-
data=[1,5,6,9]
-
data1=np.median(data)
-
print(data1)
其他的我就不給代碼示例了,直接上參數詳解好吧,也不要浪費這個時間
計算數組的標準差
numpy.std(arr, axis=None, dtype=None, out=None): 計算數組的標準差。參數axis、dtype和out的含義與numpy.mean()相同。
計算數組的方差
numpy.var(arr, axis=None, dtype=None, out=None): 計算數組的方差。參數axis、dtype和out的含義與numpy.mean()相同。
計算數組的最小值
numpy.min(arr, axis=None, out=None): 計算數組的最小值。參數axis和out的含義與numpy.mean()相同。
計算數組的最大值
numpy.max(arr, axis=None, out=None): 計算數組的最大值。參數axis和out的含義與numpy.mean()相同
計算數組的元素之和
numpy.sum(arr, axis=None, dtype=None, out=None): 計算數組的元素之和。參數axis、dtype和out的含義與numpy.mean()相同。
計算數組的元素乘積
numpy.prod(arr, axis=None, dtype=None, out=None): 計算數組的元素乘積。參數axis、dtype和out的含義與numpy.mean()相同
計算數組的累積和
numpy.cumsum(arr, axis=None, dtype=None, out=None): 計算數組的累積和。參數axis、dtype和out的含義與numpy.mean()相同。
數組的索引和切片
切片怎么說呢,一維數組好講,多維數組不太好講,我們一起看看吧
一維數組切片
對于一維數組來說,它類似于一條直線,其上的坐標位置用一個數字就可以表示。例如,對于一個長度為5的一維數組arr = [1, 2, 3, 4, 5],我們可以用數字0到4來表示它的每一個位置。當我們使用切片操作時,就可以通過指定起始位置和結束位置來獲取數組中的一部分元素。例如,如果我們想要獲取從索引1到索引3的元素,可以使用切片操作arr[1:4],結果為[2, 3, 4]。需要注意的是,切片操作是左閉右開的,即包括起始位置,但不包括結束位置
-
import numpy as np
-
arr = np.array([1,2,3,4,5])
-
print(arr[1:4])
多維數組切片
多維數組單純講不太好講,我多舉幾個例子吧
-
import numpy as np
-
data1=[1,2,3,4,5]
-
data2=[6,7,8,9,10]
-
data3=[11,12,13,14,15]
-
data4=[16,17,18,19,20]
-
data5=[21,22,23,24,25]
-
data6=[26,27,28,29,30]
-
data=np.array([[data1,data2,data3],[data4,data5,data6]])
我先創建了一個3維數組,其形狀shape=(2,3,5)運行效果圖如下

我們以實操來進行講解
行切片
假設我們現在只想取前面兩行,那我們應該怎么做呢?
思路:我們先取第一維數據
print(data[0:1])
運行效果:
現在它現在是不是就被分解成一個2維數組,我們再對這個2維數組進行操作,要想取這個2維數組前面兩行,代碼是啥呢?是不是就是data[0:2],那我們結合第一步的代碼,應該怎么做呢?
print(data[0:1,0:2])
運行效果:

這樣是不是就取到最前面兩行了
其實就是進行分解操作就行,一維一維的進行分解,那我們再來看看列切片吧
列切片
還是以這個數組進行列切片操作
print(data[:,])
運行效果圖:

可能這個操作小伙伴有些就看不懂了,啥意思呢,還是一句話,一維一維的進行分解,因為我們要取的是列,所有全部的行我們就應該都算進去,換句話來說,忽略行的影響 代碼就是data[:,]
再來取第2維
代碼還是data[:]結合起來就是
print(data[:,:]
效果圖:

我們再來取最后一維
print(data[:,:,0:2])
運行效果 :

至此,列取片也完成
總結:不管是列取片,還是行取片,你都去一維一維的去進行拆分,一維一維的去切片就好了
數組堆疊
垂直堆疊
-
# 垂直堆疊
-
stacked_vertically = np.vstack((array1, array2))
水平堆疊
-
# 水平堆疊
-
stacked_horizontally = np.hstack((array1, array2))
保存和加載數組
保存數組到文件
-
# 保存數組到文件
-
np.save('my_array.npy', data)
加載數組
-
# 加載數組
-
loaded_data = np.load('my_array.npy')

浙公網安備 33010602011771號