1. 程式人生 > >python---numpy

python---numpy

單位 python 方便 zeros tuple 二維 thead ron 列表

一 概述

  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 np
a = np.array([[1,2,3,4,5],[6,7,8,9,10]])

print(a.shape) #結果返回一個tuple元組 (2, 5)
print(a.shape[0]) #獲得行數,返回 2
print(a.shape[1]) #獲得列數,返回 5

四 矩陣的截取

4.1 按行列截取

矩陣的截取和list相同,可以通過[](方括號)來截取

import numpy as np
a = 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 np

a = 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 np

a = 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] = 1
print(a)
#大於6的值改為1後矩陣為
[[1 2 3 4 5]
 [6 1 1 1 1]]

五 矩陣的合並

矩陣的合並可以通過numpy中的hstack方法和vstack方法實現。

import numpy as np

a1 = 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 np

a = np.arange(10) # 默認從0開始到10(不包括10),步長為1
print(a) # 返回 [0 1 2 3 4 5 6 7 8 9]

a1 = np.arange(5,10) # 從5開始到10(不包括10),步長為1
print(a1) # 返回 [5 6 7 8 9]

a2 = np.arange(5,20,2) # 從5開始到20(不包括20),步長為2
print(a2) # 返回 [ 5  7  9 11 13 15 17 19]

(2)linspace

linspace()和matlab的linspace很類似,用於創建指定數量等間隔的序列,實際生成一個等差數列。

import numpy as np

a = 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 np

a = 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 np

a_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