標籤:ros 開源 嵌套 他也 false numa 分析 切片 對象
一 概述
NumPy 是一個 Python 包。 它代表 “Numeric Python”。 它是一個由多維陣列對象和用於處理數組的常式集合組成的庫。Numeric,即 NumPy 的前身,是由 Jim Hugunin 開發的。 他也開發了另一個包 Numarray ,它擁有一些額外的功能。 2005年,Travis Oliphant 通過將 Numarray 的功能整合到 Numeric 包中來建立 NumPy 包。 這個開源項目有很多貢獻者。
NumPy是高效能科學計算和資料分析的基礎包。部分功能如下:
- ndarray, 具有向量算術運算和複雜廣播能力的快速且節省空間的多維陣列。
- 用於對整組資料進行快速運算的標準數學函數(無需編寫迴圈)。
- 用於讀寫磁碟資料的工具以及用於操作記憶體對應檔的工具。
- 線性代數、隨機數產生以及傅裡葉變換功能。
- 用於整合C、C++、Fortran等語言編寫的代碼的工具。
二 建立矩陣
NumPy 中定義的最重要的對象是稱為 ndarray
的 N 維數群組類型。 它描述相同類型的元素集合。 可以使用基於零的索引訪問集合中的項目。ndarray
中的每個元素在記憶體中使用相同大小的塊。 ndarray
中的每個元素是資料類型對象的對象(稱為 dtype
)。從ndarray
對象提取的任何元素(通過切片)由一個數組標量類型的 Python 對象表示。 顯示了ndarray
,資料類型對象(dtype
)和數組標量類型之間的關係。
基本的ndarray
是使用 NumPy 中的數組函數建立的,如下所示:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
上面的構造器接受以下參數:
序號 |
參數及描述 |
1. |
object 任何暴露數組介面方法的對象都會返回一個數組或任何(嵌套)序列。 |
2. |
dtype 數組的所需資料類型,可選。 |
3. |
copy 可選,預設為true ,對象是否被複製。 |
4. |
order C (按行)、F (按列)或A (任意,預設)。 |
5. |
subok 預設情況下,返回的數組被強製為基類數組。 如果為true ,則返回子類。 |
6. |
ndimin 指定返回數組的最小維數。 |
看看下面的例子來更好地理解。
import numpy as np #引入numpy庫#建立一維的ndarray對象a = np.array([1,2,3,4,5])#建立二維的ndarray對象a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])#建立多維對象以其類推
三 擷取矩陣行列數(二維情況)
要擷取ndarray對象的各維的長度,可以通過narray對象的shape屬性。
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(a.shape) #結果返回一個tuple元組 (2, 5)print(a.shape[0]) #獲得行數,返回 2print(a.shape[1]) #獲得列數,返回 5
四 矩陣的截取4.1 按行列截取
矩陣的截取和list相同,可以通過[](方括弧)來截取
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(a[0:1]) #截取第一行,返回 [[1 2 3 4 5]]print(a[1,2:5]) #截取第二行,第三、四、五列,返回 [8 9 10]print(a[1,:]) #截取第二行,返回 [ 6 7 8 9 10]
4.2 按條件截取
按條件截取其實是在[](方括弧)中傳入自身的布爾語句。例如
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])b = a[a>6] # 截取矩陣a中大於6的元素,範圍的是一維數組print(b) # 返回 [ 7 8 9 10]# 其實布爾語句首先產生一個布爾矩陣,將布爾矩陣傳入[](方括弧)實現截取print(a>6) # 返回[[False False False False False] [False True True True True]]
按條件截取應用較多的是對矩陣中滿足一定條件的元素變成特定的值。 例如將矩陣中大於6的元素變成1。
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(a)#開始矩陣為[[ 1 2 3 4 5] [ 6 7 8 9 10]]a[a>6] = 1print(a)#大於6的值改為1後矩陣為[[1 2 3 4 5] [6 1 1 1 1]]
五 矩陣的合并
矩陣的合并可以通過numpy中的hstack方法和vstack方法實現。
import numpy as npa1 = np.array([[1,2],[3,4]])a2 = np.array([[5,6],[7,8]])#!注意 參數傳入時要以列表list或元組tuple的形式傳入print(np.hstack([a1,a2])) #橫向合并,返回結果如下 [[1 2 5 6] [3 4 7 8]]print(np.vstack((a1,a2)))#縱向合并,返回結果如下[[1 2] [3 4] [5 6] [7 8]]
矩陣的合并也可以通過concatenatef方法。
np.concatenate( (a1,a2), axis=0 ) 等價於 np.vstack( (a1,a2) ),縱向合并
np.concatenate( (a1,a2), axis=1 ) 等價於 np.hstack( (a1,a2) ),橫向向合并
六 通過函數建立矩陣
numpy模組中內建了一些建立ndarray對象的函數,可以很方便的建立常用的或有規律的矩陣。
(1)arange
import numpy as npa = np.arange(10) # 預設從0開始到10(不包括10),步長為1print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]a1 = np.arange(5,10) # 從5開始到10(不包括10),步長為1print(a1) # 返回 [5 6 7 8 9]a2 = np.arange(5,20,2) # 從5開始到20(不包括20),步長為2print(a2) # 返回 [ 5 7 9 11 13 15 17 19]
(2)linspace
linspace()和matlab的linspace很類似,用於建立指定數量等間隔的序列,實際產生一個等差數列。
import numpy as npa = np.linspace(0,10,7) # 產生首位是0,末位是10,含7個數的等差數列print(a) # 結果 [ 0. 1.66666667 3.33333333 5. 6.66666667 8.33333333 10. ]
(3)logspace
linspace用於產生等差數列,而logspace用於產生等比數列。下面的例子用於產生首位是100,末位是102,含5個數的等比數列。
import numpy as npa = np.logspace(0,2,5)print(a)# 結果[ 1. 3.16227766 10. 31.6227766 100. ]
假如,我們想要改變基數,不讓它以10為底數,我們可以改變base參數,將其設定為2試試。
a = np.logspace(0,9,10,base=2)print(a)>>>array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.])
(4) ones、zeros、eye、empty
新的ndarray
對象可以通過任何下列數組建立常式或使用低級ndarray
建構函式構造。
- ones建立全1矩陣
- zeros建立全0矩陣
- eye建立單位矩陣
- empty建立空矩陣(實際有值)
import numpy as npa_ones = np.ones((3,4)) # 建立3*4的全1矩陣print(a_ones)# 結果[[ 1. 1. 1. 1.] [ 1. 1. 1. 1.] [ 1. 1. 1. 1.]]a_zeros = np.zeros((3,4)) # 建立3*4的全0矩陣print(a_zeros)# 結果[[ 0. 0. 0. 0.] [ 0. 0. 0. 0.] [ 0. 0. 0. 0.]]a_eye = np.eye(3) # 建立3階單位矩陣print(a_eye)# 結果[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]]a_empty =lnp.empty((3,4),dtype=int) # 建立3*4的空矩陣 print(a_empty)# 結果
[[-1431655765 1073392298 -1431655765 1074440874] [ 0 1075052544 -1431655765 1075489450] [-1431655765 1075882666 0 1076101120]]
()
python---numpy