<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
NumPy 是 Python 語言的一個擴充程式庫,支援大量高維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函數庫。同時NumPy 是機器學習必不可少的工具之一。
常用操作主要有:
1、導包
import numpy as np
2、通過列表建立陣列 array()
np.array([1, 2, 3]) #一維陣列 np.array([(1, 2, 3), (4, 5, 6)]) #二維陣列
3、0/1陣列 zeros()、ones()
np.zeros((3, 3)) #3行3列 np.ones((2, 3, 4))
4、等差陣列 arange() reshape()
#一維等差 np.arange(5) #array([0, 1, 2, 3, 4]) # 二維等差 np.arange(6).reshape(2, 3) 結果: array([[0, 1, 2], [3, 4, 5]])
5、單位矩陣 eye()
np.eye(3) 結果: array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
7、等間隔陣列
#一維 np.linspace(1, 10, num=6) #array([ 1. , 2.8, 4.6, 6.4, 8.2, 10. ])
8、亂陣列
np.random.rand(2, 3) array([[0.40360777, 0.74141574, 0.32018331], [0.15261484, 0.18692149, 0.19351765]])
9、隨機整數陣列
np.random.randint(10, size=(2, 3)) #數值小於10 array([[2, 1, 0], [2, 7, 5]])
10、依據函數建立陣列
np.fromfunction(lambda i, j: i + j, (3, 6)) array([[0., 1., 2., 3., 4., 5.], [1., 2., 3., 4., 5., 6.], [2., 3., 4., 5., 6., 7.]])
+-*/ 加減乘除,對應位置元素
# 矩陣乘法 np.dot(A, B) # 如果使用 np.mat 將二維陣列準確定義為矩陣,就可以直接使用 * 完成矩陣乘法計算 np.mat(A) * np.mat(B)
轉置:
A.T
矩陣求逆:
np.linalg.inv(A)
e^x
np.exp(a)
平方根:
np.sqrt(a)
三次方:
np.power(a, 3)
一維陣列:
a = np.array([1, 2, 3, 4, 5]) # 一維陣列索引 a[0], a[-1] # 一維陣列切片 a[0:2], a[:-1]
二維陣列;
a = np.array([(1, 2, 3), (4, 5, 6), (7, 8, 9)]) # 索引 a[0], a[-1] ######## 切片 # 取第二列 a[:, 1] #取第 2,3 行 a[1:3, :]
形狀(行列數)
a.shape
更改行列數
a.reshape(2, 3) #指向新物件, reshape 並不改變原始陣列 # resize 會改變原始陣列 a.resize(2, 3)
展平陣列
a.ravel()
垂直拼合陣列,摞起來
np.vstack((a, b))
水平拼合陣列,挨著擺
np.hstack((a, b))
分割陣列:
array([[5, 0, 2], [4, 2, 4], [4, 7, 9]]) # 沿橫軸分割陣列 np.hsplit(a, 3) [array([[5], [4], [4]]), array([[0], [2], [7]]), array([[2], [4], [9]])] # 沿縱軸分割陣列 np.vsplit(a, 3) [array([[5, 0, 2]]), array([[4, 2, 4]]), array([[4, 7, 9]])]
陣列排序:
# 生成範例陣列 a = np.array(([1, 4, 3], [6, 2, 9], [4, 7, 2])) # #### 返回每列最大值 np.max(a, axis=0) # #### 返回每行最小值 np.min(a, axis=1) # #### 返回每列最大值索引 np.argmax(a, axis=0) # #### 返回每行最小值索引 np.argmin(a, axis=1)
陣列統計:
# 繼續使用上面的 a 陣列 np.median(a, axis=0) # #### 統計陣列各行的算術平均值 np.mean(a, axis=1) # #### 統計陣列各列的加權平均值 np.average(a, axis=0) # #### 統計陣列各行的方差 np.var(a, axis=1) # #### 統計陣列各列的標準偏差 np.std(a, axis=0)
進階:
# #### 51. 建立一個 5x5 的二維陣列,其中邊界值為1,其餘值為0 # In[60]: Z = np.ones((5,5)) Z[1:-1,1:-1] = 0 Z # #### 52. 使用數位 0 將一個全為 1 的 5x5 二維陣列包圍 # In[61]: Z = np.ones((5,5)) Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0) Z # #### 53. 建立一個 5x5 的二維陣列,並設定值 1, 2, 3, 4 落在其對角線下方 # In[62]: Z = np.diag(1+np.arange(4),k=-1) Z # #### 54. 建立一個 10x10 的二維陣列,並使得 1 和 0 沿對角線間隔放置 # In[63]: Z = np.zeros((10,10),dtype=int) Z[1::2,::2] = 1 Z[::2,1::2] = 1 Z # #### 55. 建立一個 0-10 的一維陣列,並將 (1, 9] 之間的數全部反轉成負數 # In[64]: Z = np.arange(11) Z[(1 < Z) & (Z <= 9)] *= -1 Z # #### 56. 找出兩個一維陣列中相同的元 # In[65]: Z1 = np.random.randint(0,10,10) Z2 = np.random.randint(0,10,10) print("Z1:", Z1) print("Z2:", Z2) np.intersect1d(Z1,Z2) # #### 57. 使用 NumPy 列印昨天、今天、明天的日期 # In[66]: yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D') today = np.datetime64('today', 'D') tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') print("yesterday: ", yesterday) print("today: ", today) print("tomorrow: ", tomorrow) # #### 58. 使用五種不同的方法去提取一個亂陣列的整數部分 # In[67]: Z = np.random.uniform(0,10,10) print("原始值: ", Z) print ("方法 1: ", Z - Z%1) print ("方法 2: ", np.floor(Z)) print ("方法 3: ", np.ceil(Z)-1) print ("方法 4: ", Z.astype(int)) print ("方法 5: ", np.trunc(Z)) # #### 59. 建立一個 5x5 的矩陣,其中每行的數值範圍從 1 到 5 # In[68]: Z = np.zeros((5,5)) Z += np.arange(1,6) Z # #### 60. 建立一個長度為 5 的等間隔一維陣列,其值域範圍從 0 到 1,但是不包括 0 和 1 # In[69]: Z = np.linspace(0,1,6,endpoint=False)[1:] Z # #### 61. 建立一個長度為10的隨機一維陣列,並將其按升序排序 # In[70]: Z = np.random.random(10) Z.sort() Z # #### 62. 建立一個 3x3 的二維陣列,並將列按升序排序 # In[71]: Z = np.array([[7,4,3],[3,1,2],[4,2,6]]) print("原始陣列: n", Z) Z.sort(axis=0) Z # #### 63. 建立一個長度為 5 的一維陣列,並將其中最大值替換成 0 # In[72]: Z = np.random.random(5) print("原陣列: ",Z) Z[Z.argmax()] = 0 Z # #### 64. 列印每個 NumPy 標量型別的最小值和最大值 # In[73]: for dtype in [np.int8, np.int32, np.int64]: print("The minimum value of {}: ".format(dtype), np.iinfo(dtype).min) print("The maximum value of {}: ".format(dtype),np.iinfo(dtype).max) for dtype in [np.float32, np.float64]: print("The minimum value of {}: ".format(dtype),np.finfo(dtype).min) print("The maximum value of {}: ".format(dtype),np.finfo(dtype).max) # #### 65. 將 `float32` 轉換為整型 # In[74]: Z = np.arange(10, dtype=np.float32) print(Z) Z = Z.astype(np.int32, copy=False) Z # #### 66. 將隨機二維陣列按照第 3 列從上到下進行升序排列 # In[75]: Z = np.random.randint(0,10,(5,5)) print("排序前:n",Z) Z[Z[:,2].argsort()] # #### 67. 從隨機一維陣列中找出距離給定數值(0.5)最近的數 # In[76]: Z = np.random.uniform(0,1,20) print("亂陣列: n", Z) z = 0.5 m = Z.flat[np.abs(Z - z).argmin()] m # #### 68. 將二維陣列的前兩行進行順序交換 # In[77]: A = np.arange(25).reshape(5,5) print(A) A[[0,1]] = A[[1,0]] print(A) # #### 69. 找出隨機一維陣列中出現頻率最高的值 # In[78]: Z = np.random.randint(0,10,50) print("隨機一維陣列:", Z) np.bincount(Z).argmax() # #### 70. 找出給定一維陣列中非 0 元素的位置索引 # In[79]: Z = np.nonzero([1,0,2,0,1,0,4,0]) Z # #### 71. 對於給定的 5x5 二維陣列,在其內部隨機放置 p 個值為 1 的數 # In[80]: p = 3 Z = np.zeros((5,5)) np.put(Z, np.random.choice(range(5*5), p, replace=False),1) Z # #### 72. 對於隨機的 3x3 二維陣列,減去陣列每一行的平均值 # In[81]: X = np.random.rand(3, 3) print(X) Y = X - X.mean(axis=1, keepdims=True) Y # #### 73. 獲得二維陣列點積結果的對角線陣列 # In[82]: A = np.random.uniform(0,1,(3,3)) B = np.random.uniform(0,1,(3,3)) print(np.dot(A, B)) # 較慢的方法 np.diag(np.dot(A, B)) # In[83]: # 較快的方法 np.sum(A * B.T, axis=1) # In[84]: # 更快的方法 np.einsum("ij, ji->i", A, B) # #### 74. 找到隨機一維陣列中前 p 個最大值 # In[85]: Z = np.random.randint(1,100,100) print(Z) p = 5 Z[np.argsort(Z)[-p:]] # #### 75. 計算隨機一維陣列中每個元素的 4 次方數值 # In[86]: x = np.random.randint(2,5,5) print(x) np.power(x,4) # #### 76. 對於二維亂陣列中各元素,保留其 2 位小數 # In[87]: Z = np.random.random((5,5)) print(Z) np.set_printoptions(precision=2) Z # #### 77. 使用科學記數法輸出 NumPy 陣列 # In[88]: Z = np.random.random([5,5]) print(Z) Z/1e3 # #### 78. 使用 NumPy 找出百分位數(25%,50%,75%) # In[89]: a = np.arange(15) print(a) np.percentile(a, q=[25, 50, 75]) # #### 79. 找出陣列中缺失值的總數及所在位 # In[90]: # 生成含缺失值的 2 維陣列 Z = np.random.rand(10,10) Z[np.random.randint(10, size=5), np.random.randint(10, size=5)] = np.nan Z # In[91]: print("缺失值總數: n", np.isnan(Z).sum()) print("缺失值索引: n", np.where(np.isnan(Z))) # #### 80. 從亂陣列中刪除包含缺失值的行 # In[92]: # 沿用 79 題中的含缺失值的 2 維陣列 Z[np.sum(np.isnan(Z), axis=1) == 0] # #### 81. 統計亂陣列中的各元素的數量 # In[93]: Z = np.random.randint(0,100,25).reshape(5,5) print(Z) np.unique(Z, return_counts=True) # 返回值中,第 2 個陣列對應第 1 個陣列元素的數量 # #### 82. 將陣列中各元素按指定分類轉換為文字值 # In[94]: # 指定類別如下 # 1 → 汽車 # 2 → 公交車 # 3 → 火車 Z = np.random.randint(1,4,10) print(Z) label_map = {1: "汽車", 2: "公交車", 3: "火車"} [label_map[x] for x in Z] # #### 83. 將多個 1 維陣列拼合為單個 Ndarray # In[95]: Z1 = np.arange(3) Z2 = np.arange(3,7) Z3 = np.arange(7,10) Z = np.array([Z1, Z2, Z3]) print(Z) np.concatenate(Z) # #### 84. 列印各元素在陣列中升序排列的索引 # In[96]: a = np.random.randint(100, size=10) print('Array: ', a) a.argsort() # #### 85. 得到二維亂陣列各行的最大值 # In[97]: Z = np.random.randint(1,100, [5,5]) print(Z) np.amax(Z, axis=1) # #### 86. 得到二維亂陣列各行的最小值(區別上面的方法) # In[98]: Z = np.random.randint(1,100, [5,5]) print(Z) np.apply_along_axis(np.min, arr=Z, axis=1) # #### 87. 計算兩個陣列之間的歐氏距離 # In[99]: a = np.array([1, 2]) b = np.array([7, 8]) # 數學計算方法 print(np.sqrt(np.power((8-2), 2) + np.power((7-1), 2))) # NumPy 計算 np.linalg.norm(b-a) # #### 88. 列印複數的實部和虛部 # In[100]: a = np.array([1 + 2j, 3 + 4j, 5 + 6j]) print("實部:", a.real) print("虛部:", a.imag) # #### 89. 求解給出矩陣的逆矩陣並驗證 # In[101]: matrix = np.array([[1., 2.], [3., 4.]]) inverse_matrix = np.linalg.inv(matrix) # 驗證原矩陣和逆矩陣的點積是否為單位矩陣 assert np.allclose(np.dot(matrix, inverse_matrix), np.eye(2)) inverse_matrix # #### 90. 使用 Z-Score 標準化演演算法對資料進行標準化處理 # Z-Score 標準化公式: # $$Z = frac{X-mathrm{mean}(X)}{mathrm{sd}(X)}$$ # In[102]: # 根據公式定義函數 def zscore(x, axis = None): xmean = x.mean(axis=axis, keepdims=True) xstd = np.std(x, axis=axis, keepdims=True) zscore = (x-xmean)/xstd return zscore # 生成亂資料 Z = np.random.randint(10, size=(5,5)) print(Z) zscore(Z) # #### 91. 使用 Min-Max 標準化演演算法對資料進行標準化處理 # Min-Max 標準化公式: # $$Y = frac{Z-min(Z)}{max(Z)-min(Z)}$$ # In[103]: # 根據公式定義函數 def min_max(x, axis=None): min = x.min(axis=axis, keepdims=True) max = x.max(axis=axis, keepdims=True) result = (x-min)/(max-min) return result # 生成亂資料 Z = np.random.randint(10, size=(5,5)) print(Z) min_max(Z) # #### 92. 使用 L2 範數對資料進行標準化處理 # L2 範數計算公式: # $$L_2 = sqrt{x_1^2 + x_2^2 + ldots + x_i^2}$$ # In[104]: # 根據公式定義函數 def l2_normalize(v, axis=-1, order=2): l2 = np.linalg.norm(v, ord = order, axis=axis, keepdims=True) l2[l2==0] = 1 return v/l2 # 生成亂資料 Z = np.random.randint(10, size=(5,5)) print(Z) l2_normalize(Z) # #### 93. 使用 NumPy 計算變數直接的相關性係數 # In[105]: Z = np.array([ [1, 2, 1, 9, 10, 3, 2, 6, 7], # 特徵 A [2, 1, 8, 3, 7, 5, 10, 7, 2], # 特徵 B [2, 1, 1, 8, 9, 4, 3, 5, 7]]) # 特徵 C np.corrcoef(Z) # 相關性係數取值從 `[-1, 1]` 變換,靠近 1 則代表正相關性較強,-1 則代表負相關性較強。結果如下所示,變數 A 與變數 A 直接的相關性係數為 `1`,因為是同一個變數。變數 A 與變數 C 之間的相關性係數為 `0.97`,說明相關性較強。 # ``` # [A] [B] [C] # array([[ 1. , -0.06, 0.97] [A] # [-0.06, 1. , -0.01], [B] # [ 0.97, -0.01, 1. ]]) [C] # ``` # #### 94. 使用 NumPy 計算矩陣的特徵值和特徵向量 # In[106]: M = np.matrix([[1,2,3], [4,5,6], [7,8,9]]) w, v = np.linalg.eig(M) # w 對應特徵值,v 對應特徵向量 w, v # 我們可以通過 `P'AP=M` 公式反算,驗證是否能得到原矩陣。 # In[107]: v * np.diag(w) * np.linalg.inv(v) # #### 95. 使用 NumPy 計算 Ndarray 兩相鄰元素差值 # In[108]: Z = np.random.randint(1,10,10) print(Z) # 計算 Z 兩相鄰元素差值 print(np.diff(Z, n=1)) # 重複計算 2 次 print(np.diff(Z, n=2)) # 重複計算 3 次 print(np.diff(Z, n=3)) # #### 96. 使用 NumPy 將 Ndarray 相鄰元素依次累加 # In[109]: Z = np.random.randint(1,10,10) print(Z) """ [第一個元素, 第一個元素 + 第二個元素, 第一個元素 + 第二個元素 + 第三個元素, ...] """ np.cumsum(Z) # #### 97. 使用 NumPy 按列連線兩個陣列 # In[110]: M1 = np.array([1, 2, 3]) M2 = np.array([4, 5, 6]) np.c_[M1, M2] # #### 98. 使用 NumPy 按行連線兩個陣列 # In[111]: M1 = np.array([1, 2, 3]) M2 = np.array([4, 5, 6]) np.r_[M1, M2] # #### 99. 使用 NumPy 列印九九乘法表 # In[112]: np.fromfunction(lambda i, j: (i + 1) * (j + 1), (9, 9)) # #### 100. 使用 NumPy 將實驗樓 LOGO 轉換為 Ndarray 陣列 # In[113]: from io import BytesIO from PIL import Image import PIL, requests # 通過連結下載影象 URL = 'https://s3.ap-northeast-1.wasabisys.com/img.it145.com/202209/logo-blackocj4rf4xpjg.png' response = requests.get(URL) # 將內容讀取為影象 I = Image.open(BytesIO(response.content)) # 將影象轉換為 Ndarray shiyanlou = np.asarray(I) shiyanlou # In[114]: # 將轉換後的 Ndarray 重新繪製成影象 from matplotlib import pyplot as plt get_ipython().run_line_magic('matplotlib', 'inline') plt.imshow(shiyanlou) plt.show()
到此這篇關於python中numpy 常用操作總結的文章就介紹到這了,更多相關python numpy內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45