【Python庫】Numpy(較完整)

目錄

參考

簡介

詳介

Ndarray 對象

NumPy 數據類型

NumPy 數組屬性

Numpy的數組類ndarray的重要函數

NumPy 創建數組

numpy.empty

numpy.zeros

numpy.ones

NumPy 從已有的數組創建數組

numpy.asarray

numpy.frombuffer

numpy.fromiter

NumPy 從數值範圍創建數組

numpy.arange

numpy.linspace等差

numpy.logspace等比

NumPy 切片和索引

 ~(取補運算符):過濾 NaN

NumPy 迭代數組

Numpy 數組操作

修改數組形狀

翻轉數組

修改數組維度

連接數組

分割數組

數組元素的添加與刪除

NumPy 字符串函數 

NumPy 數學函數

NumPy 算術函數

NumPy 統計函數

numpy.amin() 和 numpy.amax()

NumPy 排序函數

numpy.sort()

numpy.argsort()

numpy.argmax() 和 numpy.argmin()

NumPy 矩陣庫(Matrix)

numpy.matlib.empty()

numpy.matlib.zeros()全零

numpy.matlib.ones()全1

numpy.matlib.eye()

numpy.matlib.identity()

NumPy 線性代數

讀寫數據

numpy.save()

numpy.savez() 

numpy.savetxt()與numpy.loadtxt()

NumPy Matplotlib


參考

Numpy教程

Numpy教程_簡書

Numpy中數據的常用的保存與讀取方法

.npz文件的讀取

flatten函數將二維數組轉換爲一維數組

將Pandas中的DataFrame類型轉換成Numpy中array類型的三種方法

 


簡介

簡介

 


詳介

Ndarray 對象

N 維數組對象 ndarray,它是一系列同類型數據的集合,用於存放同類型元素的多維數組。

創建一個 ndarray 只需調用 NumPy 的 array 函數即可:numpy.array()

#創建一維、二維數組
import numpy as np
dim1=np.array([1,2,3])
#[1 2 3]
dim2=np.array([[1,2,3],[4,5,6]]) #注:方括號的數量!
'''
[[1 2 3]
 [4 5 6]]
'''
建數組(個人嘗試)

 

NumPy 數據類型

numpy 支持的數據類型比 Python 內置的類型要多很多,基本上可以和 C 語言的數據類型對應。

numpy 的數值類型實際上是 數據類型對象dtype 的實例。dtype 用來描述與數組對應的內存區域如何使用。

NumPy 數組屬性

NumPy 數組的維數稱爲秩(rank),一維數組的秩爲 1,二維數組的秩爲 2,以此類推。

在 NumPy中,每一個線性的數組稱爲是一個軸(axis),也就是維度(dimensions),而軸的數量——秩,就是數組的維數。。比如說,二維數組相當於是兩個一維數組,其中第一個一維數組中每個元素又是一個一維數組。所以一維數組就是 NumPy 中的軸(axis),第一個軸相當於是底層數組,第二個軸是底層數組裏的數組

很多時候可以聲明 axis。axis=0,表示沿着第 0 軸進行操作,即對每一列進行操作;axis=1,表示沿着第1軸進行操作,即對每一行進行操作。

Numpy“軸”(別人寫的,不一定對)

 

Numpy的數組類ndarray的重要函數

  • ndarray.ndim

    秩,即軸的數量或維度的數量

  • ndarray.shape

    數組的維度。以元組形式返回每一個軸的長度。對於一個n行m列的矩陣, shape即(n,m)

  • ndarray.size

    返回數組所有元素的數目。

  • ndarray.dtype

    返回數組中元素的數據類型

#reshape改變數組維度ndim(個人:改維度,關鍵在方括號的變化吧)
import numpy as np
a=np.arange(24)#現在a只有一個維度
print(a.ndim)#1
print(a)
#[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

#調整a維度大小
b=a.reshape(2,4,3)#改爲三個維度,2部分+每部分4行3列
print(b.ndim)#3
print(b)
'''
[[[ 0  1  2]
  [ 3  4  5]
  [ 6  7  8]
  [ 9 10 11]]

 [[12 13 14]
  [15 16 17]
  [18 19 20]
  [21 22 23]]]'''


c=a.reshape(2,2,4,3)#改爲四個維度,2部分+2部分+每部分4行3列
print(c.ndim)#4
print(c)
'''
[[[[ 0  1  2]
   [ 3  4  5]
   [ 6  7  8]
   [ 9 10 11]]

  [[12 13 14]
   [15 16 17]
   [18 19 20]
   [21 22 23]]]


 [[[24 25 26]
   [27 28 29]
   [30 31 32]
   [33 34 35]]

  [[36 37 38]
   [39 40 41]
   [42 43 44]
   [45 46 47]]]]'''
#ndarray.shape以及reshape也可以用於調整數組大小
#注:shape與reshape用法不同
import numpy as np
a=np.array([[1,2,3],[4,5,6]])
print(a.shape)#(2, 3)
a.shape=(3,2)  #或b=a.reshape(3,2)
print(a)
'''
[[1 2]
 [3 4]
 [5 6]]
 '''

NumPy 創建數組

numpy.empty

import numpy as np
#numpy.empty 方法用來創建一個指定形狀(shape)、數據類型(dtype)且未初始化的數組
x=np.empty([3,2],dtype=int)
print(x)#數組元素爲隨機值,因爲它們未初始化
'''
[[ 543584032  543516788]
 [1769104755  537555813]
 [ 538976288 1948262432]]
'''

numpy.zeros

import numpy as np
#numpy.zeros創建指定大小的數組,數組元素以 0 來填充(# 默認爲浮點數)
x=np.zeros(5)
print(x)#[0. 0. 0. 0. 0.]
x=np.zeros((2,4,3),dtype=np.int)#2部分 4行 3列
print(x)
'''
[[[0 0 0]
  [0 0 0]
  [0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]
  [0 0 0]
  [0 0 0]]]
'''

numpy.ones

#numpy.ones創建指定形狀的數組,數組元素以 1 來填充
import numpy as np
x=np.ones([2,3],dtype=int)# 或 dtype=np.int
print(x)
'''[[1 1 1]
 [1 1 1]]'''

 

NumPy 從已有的數組創建數組

numpy.asarray

numpy.asarray參數解釋
import numpy as np
#將列表轉換爲 ndarray(多維數組)
x=[1,2,3]
a=np.asarray(x)
print(a)#[1 2 3]
print(type(a))#<class 'numpy.ndarray'>

numpy.frombuffer

參數解釋
import numpy as np
#numpy.frombuffer 接受 buffer 輸入參數,以流的形式讀入轉化成 ndarray 對
s=b'hello world'#若不加b,則報錯TypeError: a bytes-like object is required, not 'str'
a=np.frombuffer(s,dtype='S1')
print(a)#[b'h' b'e' b'l' b'l' b'o' b' ' b'w' b'o' b'r' b'l' b'd']

numpy.fromiter

參數解釋
import numpy as np
#numpy.fromiter 方法從可迭代對象中建立 ndarray 對象,返回一維數組
#使用list函數創建列表對象
list=range(5)
print(type(list))#<class 'range'>
it=iter(list)
print(type(it))#<class 'range_iterator'>

#使用迭代器創建ndarray
x=np.fromiter(it,dtype=float)
print(x)#[0. 1. 2. 3. 4.]
print(type(x))#<class 'numpy.ndarray'>

NumPy 從數值範圍創建數組

numpy.arange

import numpy as np
x=np.arange(5)
print(x)#[0 1 2 3 4]
xx=np.arange(2,5,1)
print(xx)#[2 3 4]

numpy.linspace等差

numpy.logspace等比

 

NumPy 切片和索引

ndarray對象的內容可以通過索引或切片來訪問和修改,與 Python 中 list 的切片操作一樣。ndarray 數組可以基於 0 - n(不含n) 的下標進行索引,切片對象可以通過內置的 slice 函數,並設置 start, stop 及 step 參數進行,從原數組中切割出一個新數組。

import numpy as np
x=np.arange(5)
print(x)#[0 1 2 3 4]
s=slice(2,4)
print(x[s])#[2 3]

切片還可以包括省略號,來使選擇元組的長度與數組的維度相同。 如果在行位置使用省略號,將返回包含行中元素的 ndarray。

import numpy as np

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a)
# 從某個索引處開始切割
print('從數組索引 a[1:] 處開始切割')
print(a[1:])


a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print(a[..., 1])  # 第2列元素
print(a[1, ...])  # 第2行元素
print(a[..., 1:])  # 第2列及剩下的所有元素
'''[[3 4 5]
 [4 5 6]]
[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]]'''

 ~(取補運算符):過濾 NaN

import numpy as np

a = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])#[nan  1.  2. nan  3.  4.  5.]
print(a)
print(a[~np.isnan(a)])#[1. 2. 3. 4. 5.]

 

NumPy 迭代數組

NumPy 迭代器對象 numpy.nditer 提供了一種靈活訪問一個或者多個數組元素的方式。

迭代器最基本的任務的可以完成對數組元素的訪問。

import numpy as np
#使用 arange() 函數創建一個 2X3 數組,並使用 nditer 對它進行迭代
#迭代輸出數組元素
a=np.arange(6).reshape(2,3)
print('原始數組:',a)#[[0 1 2] [3 4 5]]
for x in np.nditer(a):
    print(x,end=',')#0,1,2,3,4,5,

nditer 對象有另一個可選參數 op_flags,可用於修改數組中元素的值。

 

Numpy 數組操作

修改數組形狀

  • numpy.ndarray.flat 是一個數組元素迭代器
import numpy as np
#numpy.ndarray.flat 是一個數組元素迭代器
a=np.arange(9).reshape(3,3)
for row in a:
    print(row)
'''[0 1 2]
[3 4 5]
[6 7 8]'''

#對數組中每個元素都進行處理,可以使用flat屬性,該屬性是一個數組元素迭代器
for element in a.flat:
    print(element)
'''0
1
2
3
4
5
6
7
8'''
  • numpy.ndarray.flatten 返回一份數組拷貝
a=np.arange(9).reshape(3,3)
print(a.flatten())#[0 1 2 3 4 5 6 7 8]
  • numpy.ravel() 展平的數組元素
a=np.arange(9).reshape(3,3)
print(a.ravel())#[0 1 2 3 4 5 6 7 8]

翻轉數組

  • numpy.transpose 函數用於對換數組的維度
a=np.arange(9).reshape(3,3)
print(a)
'''
[[0 1 2]
 [3 4 5]
 [6 7 8]]'''
print(a.transpose())#或print(np.transpose(a))
'''[[0 3 6]
 [1 4 7]
 [2 5 8]]'''
  • numpy.rollaxis 函數(滾動軸)向後滾動特定的軸到一個特定位置
import numpy as np
a=np.arange(8).reshape(2,2,2)
print(a)
'''[[[0 1]
  [2 3]]

 [[4 5]
  [6 7]]]'''
#將輸入軸2滾動到軸0(寬度到深度)
print(np.rollaxis(a,2))
'''[[[0 2]
  [4 6]]

 [[1 3]
  [5 7]]]'''
#將輸入軸0滾動到軸1(寬度到高度)
print(np.rollaxis(a,2,1))
'''[[[0 2]
  [1 3]]

 [[4 6]
  [5 7]]]'''
  • numpy.swapaxes 函數用於交換數組的兩個軸

修改數組維度

ravel & flatten 將數組變爲一維

  • numpy.expand_dims 函數 通過在指定位置插入新的軸來擴展數組形狀
import numpy as np
x=np.array(([1,2],[3,4]))
print(x)
'''[[1 2]
 [3 4]]'''
y0=np.expand_dims(x,axis=0)
print(y0)
'''[[[1 2]
  [3 4]]]'''#注意方括號的個數、位置變化

y1=np.expand_dims(x,axis=1)
print(y1)
'''[[[1 2]]

 [[3 4]]]'''

print(x.shape,y0.shape,y1.shape)#(2, 2) (1, 2, 2) (2, 1, 2)

 

連接數組

 

分割數組

數組元素的添加與刪除

 

NumPy 字符串函數 

如numpy.char.capitalize('i love you')

import numpy as np
print(np.char.capitalize('i love you'))#I love you
print(np.char.title('i love you'))#I Love You

NumPy 數學函數

NumPy 包含大量的各種數學運算的函數,包括三角函數,算術運算的函數,複數處理函數等。

NumPy 算術函數

NumPy 算術函數包含簡單的加減乘除: add()subtract()multiply() 和 divide()。需要注意的是數組必須具有相同的形狀或符合數組廣播規則。

廣播(Broadcast)是 numpy 對不同形狀(shape)的數組進行數值計算的方式, 對數組的算術運算通常在相應的元素上進行。

 

NumPy 統計函數

從數組中查找最小元素,最大元素,百分位標準差和方差等。

numpy.amin() 和 numpy.amax()

numpy.amin() 用於計算數組中的元素沿指定軸的最小值;numpy.amax() 用於計算數組中的元素沿指定軸的最大值。

import numpy as np
a=np.array([[1,2,3],[2,3,4],[8,7,5]])#二維數組包括行和列
print(a.ndim) #2維數組
print(a.shape) #(3, 3) 3行3列

print(np.amin(a,0))#沿軸0的最小值 [1 2 3]
print(np.amax(a,0))#沿軸0的最大值[8 7 5]

print(np.amin(a,1))#沿軸1的最小值 [1 2 5]
print(np.amax(a,1))#沿軸1的最大值[3 4 8]

#axis=0表示作用於列;axis=1表示作用於行
#print(np.amin(a,2))  報錯numpy.AxisError: axis 2 is out of bounds for array of dimension 2

NumPy 排序函數

numpy.sort()

numpy.sort() 函數返回輸入數組的排序副本

numpy.argsort()

numpy.argsort() 函數返回的是數組值從小到大的索引值

numpy.argmax() 和 numpy.argmin()

分別沿給定軸返回最大和最小元素的索引

 

NumPy 矩陣庫(Matrix)

numpy.matlib.empty()

返回一個隨機矩陣

import numpy as np
import numpy.matlib
#numpy的__init__.py中並沒有引入matlib,
# matlib是一個新的包,只有這樣引入纔不會錯
m=np.matlib.empty((2,3))
print(m)
'''[[6.23042070e-307 1.89146896e-307 1.37961302e-306]
 [6.23053614e-307 6.23053954e-307 1.33511969e-306]]'''

numpy.matlib.zeros()全零

m=np.matlib.zeros((2,3),dtype=int)
print(m)
'''[[0 0 0]
 [0 0 0]]'''

numpy.matlib.ones()全1

numpy.matlib.eye()

對角線元素爲 1,其他位置爲零

numpy.matlib.identity()

給定大小的單位矩陣

NumPy 線性代數

 

讀寫數據

 

numpy.save()

import numpy as np
a=np.array([1,2,3])
np.save('a.npy',a)
#如果文件路徑末尾沒有擴展名 .npy,該擴展名會被自動加上
print(np.load('a.npy'))#[1 2 3]

numpy.savez() 

import numpy as np
a=np.array([[1,2,3],[4,5,6]])#注意方括號的個數
b=np.arange(0,1.0,0.1)
c=np.sin(b)#c使用了關鍵字參數sin_array
np.savez('runoob.npz',a,b,sin_array=c)
r=np.load('runoob.npz')

#查看各數組的名稱
print(r['arr_0'])#數組a
'''[[1 2 3]
 [4 5 6]]'''
print(r['arr_1'])#數組b
#[0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
print(r['sin_array'])#數組c
'''[0.         0.09983342 0.19866933 0.29552021 0.38941834 0.47942554
 0.56464247 0.64421769 0.71735609 0.78332691]'''

numpy.savetxt()與numpy.loadtxt()

 

NumPy Matplotlib

Matplotlib 是 Python 的繪圖庫。 它可與 NumPy 一起使用,提供了一種有效的 MatLab 開源替代方案。 它也可以和圖形工具包一起使用,如 PyQt 和 wxPython。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章