14天Python編程從入門到實(shí)踐--Day14:Numpy的通用函數(shù)

'''
Numpy 通用函數(shù)
'''

# 數(shù)組形狀: .T/reshape()/.resize()
# 注意了:.T/.reshape()/.resize()都是生成新的數(shù)組?。?!

# .T:裝置 原來的shape為(3,4),轉(zhuǎn)置后為(4,3),一位數(shù)組轉(zhuǎn)置后結(jié)果不變
ar1 = np.arange(10)
ar2 = np.ones((5,2))
print(ar1,'\n',ar1.T)
print(ar2,'\n',ar2.T)
print('-----------------')

# numpy.reshape(a, newshape, order='C'):為數(shù)組提供新形狀,而不更改其數(shù)據(jù),所以元素?cái)?shù)量需要一致??!
ar3 = ar1.reshape(2,5) # 用法1:直接將已有數(shù)組改變形狀 
ar4 = np.zeros((4,6)).reshape(8,3) # 用法2:生成數(shù)組后直接改變形狀
ar5 = np.reshape(np.arange(15),(3,5)) # 用法3:參數(shù)內(nèi)添加數(shù)組,目標(biāo)形狀
print(ar1,'\n',ar3)
print(ar4)
print(ar5)
print('-----------------')

# numpy.resize(a, new_shape):返回具有指定形狀的新數(shù)組,如有必要可重復(fù)填充所需數(shù)量的元素。
ar6 = np.resize(np.arange(5),(3,4))
print(ar6)

輸出:
[0 1 2 3 4 5 6 7 8 9] 
 [0 1 2 3 4 5 6 7 8 9]
[[ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]
 [ 1.  1.]] 
 [[ 1.  1.  1.  1.  1.]
 [ 1.  1.  1.  1.  1.]]
-----------------
[0 1 2 3 4 5 6 7 8 9] 
 [[0 1 2 3 4]
 [5 6 7 8 9]]
[[ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
-----------------
[[0 1 2 3]
 [4 0 1 2]
 [3 4 0 1]]

# 數(shù)組的復(fù)制

ar1 = np.arange(10)
ar2 = ar1
print(ar2 is ar1)
ar1[2] = 9
print(ar1,ar2)
# 回憶python的賦值邏輯:指向內(nèi)存中生成的一個(gè)值 → 這里ar1和ar2指向同一個(gè)值,所以ar1改變,ar2一起改變

ar3 = ar1.copy()
print(ar3 is ar1)
ar1[0] = 9
print(ar1,ar3)
# copy方法生成數(shù)組及其數(shù)據(jù)的完整拷貝
# 再次提醒:.T/.reshape()/.resize()都是生成新的數(shù)組?。?!

輸出:
True
[0 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]
False
[9 1 9 3 4 5 6 7 8 9] [0 1 9 3 4 5 6 7 8 9]

# 數(shù)組類型轉(zhuǎn)換:.astype()

ar1 = np.arange(10,dtype=float)
print(ar1,ar1.dtype)
print('-----')
# 可以在參數(shù)位置設(shè)置數(shù)組類型

ar2 = ar1.astype(np.int32)
print(ar2,ar2.dtype)
print(ar1,ar1.dtype)
# a.astype():轉(zhuǎn)換數(shù)組類型
# 注意:養(yǎng)成好習(xí)慣,數(shù)組類型用np.int32,而不是直接int32

輸出:
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.] float64
-----
[0 1 2 3 4 5 6 7 8 9] int32
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9.] float64
In [10]:

# 數(shù)組拆分 

ar = np.arange(16).reshape(4,4)
ar1 = np.hsplit(ar,2)
print(ar)
print(ar1,type(ar1))
# numpy.hsplit(ary, indices_or_sections):將數(shù)組水平(逐列)拆分為多個(gè)子數(shù)組 → 按列拆分
# 輸出結(jié)果為列表,列表中元素為數(shù)組

ar2 = np.vsplit(ar,4)
print(ar2,type(ar2))
# numpy.vsplit(ary, indices_or_sections)::將數(shù)組垂直(行方向)拆分為多個(gè)子數(shù)組 → 按行拆

輸出:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])] <class 'list'>
[array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])] <class 'list'>

# 數(shù)組簡單運(yùn)算

ar = np.arange(6).reshape(2,3)
print(ar + 10)   # 加法
print(ar * 2)   # 乘法
print(1 / (ar+1))  # 除法
print(ar ** 0.5)  # 冪
# 與標(biāo)量的運(yùn)算

print(ar.mean())  # 求平均值
print(ar.max())  # 求最大值
print(ar.min())  # 求最小值
print(ar.std())  # 求標(biāo)準(zhǔn)差
print(ar.var())  # 求方差
print(ar.sum(), np.sum(ar,axis = 0))  # 求和,np.sum() → axis為0,按列求和;axis為1,按行求和
print(np.sort(np.array([1,4,3,2,5,6])))  # 排序
# 常用函數(shù)

輸出:
[[10 11 12]
 [13 14 15]]
[[ 0  2  4]
 [ 6  8 10]]
[[ 1.          0.5         0.33333333]
 [ 0.25        0.2         0.16666667]]
[[ 0.          1.          1.41421356]
 [ 1.73205081  2.          2.23606798]]
2.5
5
0
1.70782512766
2.91666666667
15 [3 5 7]
[1 2 3 4 5 6]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容