1. 程式人生 > >Python - numpy 模塊

Python - numpy 模塊

hit 基本操作 使用 thead 數組比較 內存空間 運行 類型 bool

numpy

概述

? Numerical Python. 補充了python所欠缺的數值計算能力

? Numpy是其他數據分析及機器學習庫的底層庫

? Numpy完全標準C語言實現,運行效率充分優化

? Numpy開源免費

基本數據結構

類型名類型表示符
布爾類型 bool_
有符號整型 int8/16/32/64
無符號整型 uint8/16/32/64
浮點型 float16/32/64
復數型 complex64/128
字符串型 str_,每個字符32位Unicode

數組 - nadarray 對象

概念

類似於列表, 可以多維嵌套, 但是要求必須內部存儲相同類型的數據

即同質數組, 相同的數據類型的空間占用相同, 且查詢方便

空間結構

ary = np.array([1, 2, 3, 4, 5])
"""         
           _______________________________________
a  ----->  | nadarray 對象                         |
           |                                      |
           | 元數據                                |
           |_______                               |                 
           |_dim___|                              |  
           |_dtype_|        _____________________ |
           |_data__|   ---> |_1_|_2_|_3_|_4_|_5_| | 
           |_shape_|  ---> (5,)                   |
           |_______|______________________________|

"""

元數據 (metadata)

存儲對數組的描述信息, 如 : dim count, dtype, dara, shape 等

實際數據

完整的數組數據, 將實際數據與元數據分開存放

一方面提高了內存空間的使用效率

另一方面減少對實際數據的訪問頻率,提高性能。

創建語法

np.array([[], [], []])  # 直接創建

np.arange(0, 10, 1) # 序列創建

np.zeros(10) # 全 0 創建

np.ones(10) # 全 1 創建

np.zeros_like(ary) # 仿結構創建 全 0 數組

np.ones_like(ary) 
# 仿結構創建 全 1 數組

示例

import numpy as np

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

b = np.arange(7, 13, 1)
print(b)  # [ 7  8  9 10 11 12]

c = np.zeros(6)
print(c)  # [ 0.  0.  0.  0.  0.  0.]

d = np.ones(6)
print(d)  # [ 1.  1.  1.  1.  1.  1.]
print(d / 2)  # [ 0.5  0.5  0.5  0.5  0.5  0.5]

e = np.array([[1, 2, 3], [4, 5, 6]])
print(np.ones_like(e))
"""
[[1 1 1]
 [1 1 1]]
"""

nadarray 對象屬性基本操作

數組維度

ary.shape   數組維度

可以直接進行更改數組結構

但是更改需要合理, 比如 6 元素 更改為 3*3 需要9元素則無法滿足從而報錯

ary = np.array([1, 2, 3, 4, 5, 6])
print(ary, ary.shape)  # [1 2 3 4 5 6] (6,)
ary.shape = (2, 3) print(ary, ary.shape) """ [[1 2 3] [4 5 6]] (2, 3) """ print(ary[1][1]) # 5

元素類型

ary.dtype  數組元素類型

ary.astype  修改元素類型

數據類型直接更改是不可取的, 需要使用 astype 方法進行更改

利用重新開辟新的空間來賦值存儲

即此方法不會改變原值, 需要用返回值進行復制

# 數組元素類型
ary = np.array([1, 2, 3, 4, 5, 6])
print(ary, ary.dtype)  # [1 2 3 4 5 6] int32
# ary.dtype = np.int64 # print(ary, ary.dtype)
# 更改數據類型 b = ary.astype(float32) print(ary, ary.dtype) # [1 2 3 4 5 6] int32 print(b, b.dtype) # [ 8.58993459e+09 1.71798692e+10 2.57698038e+10] float32

數組元素個數

ary.size  返回數組元素個數

len(ary)  返回數組元素個數

ary = np.array([1, 2, 3, 4, 5, 6])
print(ary.size)  # 6
print(len(ary))  # 6

數組元素索引

下標

# 數組元素的索引
ary = np.arange(1, 9)
ary.shape = (2, 2, 2)
print(ary, ary.shape)
"""
[[[1 2]
  [3 4]]

 [[5 6]
  [7 8]]] (2, 2, 2)
"""

print(ary[0])  # 0頁數據
"""
[[1 2]
 [3 4]]
"""

print(ary[0][0])  # 0頁0行數據
"""
[1 2]
"""

print(ary[0][0][0])  # 0頁0行0列數據
"""
1
"""

print(ary[0, 0, 0])  # 0頁0行0列數據
"""
1
"""


# 使用for循環,把ary數組中的元素都遍歷出來。
for i in range(ary.shape[0]):
    for j in range(ary.shape[1]):
        for k in range(ary.shape[2]):
            print(ary[i, j, k], end= )

# 1 2 3 4 5 6 7 8 

數組運算

遍歷所有的元素進行運算

# ary = np.array([1, 2, 3, 4, 5])
print(ary + 2)  # [3 4 5 6 7]
print(ary + ary)  # [ 2  4  6  8 10]
print(ary * ary)  # [ 1  4  9 16 25]

數組比較

遍歷所有元素進行比較

# ary = np.array([1, 2, 3, 4, 5])
print(ary > 3)  # [False False False  True  True]

Python - numpy 模塊