NumPy基礎入門(1)基礎內容

學習彙總:點這裏

前言

NumPy是使用Python進行科學計算的基本軟件包。它包含以下內容:

  1. 強大的N維數組對象
  2. 複雜的(廣播)功能
  3. 集成C / C ++和Fortran代碼的工具
  4. 有用的線性代數,傅立葉變換和隨機數功能

除了其明顯的科學用途外,NumPy還可以用作通用數據的高效多維容器。可以定義任意數據類型。這使NumPy可以無縫,快速地與各種數據庫集成。

如果有疑問的可以直接找官網地址

1.NumPy的主要對象

NumPy的主要對象是齊次多維數組。它是所有相同類型的元素(通常爲數字)表,由非負整數元組索引。在NumPy中,尺寸稱爲軸。NumPy的數組類稱爲ndarray。請注意,numpy.array這與標準Python庫類不同array.array,後者僅處理一維數組且功能較少。ndarray對象的重要屬性是:

  1. ndarray.ndim #數組的軸數(尺寸)。
  2. ndarray.shape #數組的尺寸。這是一個整數元組,指示每個維中數組的大小。對於具有n行和m列的矩陣,shape將爲(n,m)。shape因此,元組的長度 是軸數ndim。
  3. ndarray.size #數組元素的總數。這等於的元素的乘積shape。
  4. ndarray.dtype #一個對象,描述數組中元素的類型。可以使用標準Python類型創建或指定dtype。另外,NumPy提供了自己的類型。
  5. ndarray.itemsize #數組中每個元素的大小(以字節爲單位)。
  6. ndarray.data #包含數組實際元素的緩衝區。通常,我們不需要使用此屬性,因爲我們將使用索引工具訪問數組中的元素。
>>> import numpy as np
>>> a = np.arange(15).reshape(3, 5)
>>> a  #輸出數組
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
>>> a.shape  #輸出數組尺寸
(3, 5)
>>> a.ndim  #輸出數組軸數
2
>>> a.dtype.name  #輸出數組元素類型
'int64'
>>> a.itemsize  #輸出數組元素大小(字節)
8
>>> a.size  #輸出數組元素個數
15

2.創建數組

基本創建數組方式如下:

>>> a = np.array(1,2,3,4)    # WRONG
>>> a = np.array([1,2,3,4])  # RIGHT
>>> import numpy as np
>>> a = np.array([2,3,4])  #創建一維數組
>>> a
array([2, 3, 4])
>>> a.dtype
dtype('int64')
>>> b = np.array([1.2, 3.5, 5.1])
>>> b.dtype
dtype('float64')
>>> b = np.array([(1.5,2,3), (4,5,6)])  #創建二維數組
>>> b
array([[ 1.5,  2. ,  3. ],
       [ 4. ,  5. ,  6. ]])
>>> c = np.array( [ [1,2], [3,4] ], dtype=complex )  #創建指定狀態的數組
>>> c
array([[ 1.+0.j,  2.+0.j],
       [ 3.+0.j,  4.+0.j]])

注意:函數zeros創建一個全零的數組,該函數ones創建全零 的數組,該函數empty 創建其初始內容是隨機的並取決於內存狀態的數組。默認情況下,創建的數組的dtype爲 float64。而函數arange類似於Python內置函數的功能range。函數linspace將範圍(a,b)切割成元素數量爲c的數組。

import numpy as np
>>> np.zeros( (3,4) )  #創建全零的數組
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
>>> np.ones( (2,3,4), dtype=np.int16 )  #創建全一數組
array([[[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]],
       [[ 1, 1, 1, 1],
        [ 1, 1, 1, 1],
        [ 1, 1, 1, 1]]], dtype=int16)
>>> np.empty( (2,3) )  #創建其初始內容是隨機的並取決於內存狀態的數組
array([[  3.73603959e-262,   6.02658058e-154,   6.55490914e-260],
       [  5.30498948e-313,   3.14673309e-307,   1.00000000e+000]])

>>> np.arange( 10, 30, 5 )  #類似arrange的Python內置函數range
array([10, 15, 20, 25])
>>> np.arange( 0, 2, 0.3 )  #獲得從0-2範圍的9個元素的數組
array([ 0. ,  0.3,  0.6,  0.9,  1.2,  1.5,  1.8])

如果數組太大而無法打印,則NumPy會自動跳過數組的中心部分,僅打印角點。要禁用此行爲並強制NumPy打印整個數組,可以使用更改打印選項set_printoptions。

np.set_printoptions(threshold=sys.maxsize) 

3.數組基本操作

數組上的算術運算符適用於elementwise。創建一個新數組,並用結果填充。

基礎運算

>>> a = np.array( [20,30,40,50] )
>>> b = np.arange( 4 )
>>> b
array([0, 1, 2, 3])
>>> c = a-b
>>> c
array([20, 29, 38, 47])
>>> b**2
array([0, 1, 4, 9])
>>> 10*np.sin(a)
array([ 9.12945251, -9.88031624,  7.4511316 , -2.62374854])
>>> a<35
array([ True, True, False, False])

矩陣運算

>>> A = np.array( [[1,1],
...                [0,1]] )
>>> B = np.array( [[2,0],
...                [3,4]] )
>>> A * B
array([[2, 0],
       [0, 4]])
>>> A @ B
array([[5, 4],
       [3, 4]])
>>> A.dot(B) 
array([[5, 4],
       [3, 4]])

>>> a = np.ones((2,3), dtype=int)
>>> b = np.random.random((2,3))
>>> a *= 3
>>> a
array([[3, 3, 3],
       [3, 3, 3]])
>>> b += a
>>> b
array([[ 3.417022  ,  3.72032449,  3.00011437],
       [ 3.30233257,  3.14675589,  3.09233859]])
>>> a += b                  # b is not automatically converted to integer type
Traceback (most recent call last):
  ...
TypeError: Cannot cast ufunc add output from dtype('float64') to dtype('int64') with casting rule 'same_kind'

矩陣行列運算

>>> a = np.random.random((2,3))
>>> a
array([[ 0.18626021,  0.34556073,  0.39676747],
       [ 0.53881673,  0.41919451,  0.6852195 ]])
>>> a.sum()
2.5718191614547998
>>> a.min()
0.1862602113776709
>>> a.max()
0.6852195003967595
>>> b = np.arange(12).reshape(3,4)
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>>
>>> b.sum(axis=0)  # 輸出每一列元素和
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1)  # 輸出每一行最小元素
array([0, 4, 8])
>>>
>>> b.cumsum(axis=1)   # 輸出按水平方向每一列的遞進式數組
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]])

注意:NumPy提供了熟悉的數學函數,例如sin,cos和exp。在NumPy中,這些被稱爲“通用函數”(ufunc)。在NumPy中,這些函數在數組上逐元素操作,從而生成數組作爲輸出。

4.索引,切片及循環

一維數組可以被索引,切片和遍歷,就像 列表 和其他Python序列一樣。而多維數組每個軸可以有一個索引。這些索引以元組給出,並用逗號分隔:

>>> a = np.arange(10)**3
>>> a
array([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])
>>> a[2]
8
>>> a[2:5]  #輸出下標爲2-5範圍的數組
array([ 8, 27, 64])
>>> a[:6:2] = -1000  # 下標0-6範圍的數組間隔賦值爲-1000
>>> a
array([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])
>>> a[ : :-1]  # 翻轉數組
array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])
import numpy as np
def f(x,y):
    return 10*x+y
b = np.fromfunction(f,(5,4),dtype = int)
print (b)
print (b[2,3])
print (b[0:5, 1])  # each row in the second column of b
print (b[ : ,1])  # equivalent to the previous example
print (b[1:3, : ])  # each column in the second and third row of b
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章