學習NumPy庫,把一些重要的或者難的用法記錄下來,方便複習。
- 從數值範圍創建數組
numpy.arange(start, stop, step, dtype)#參數分別爲起始值,終止值,步長和數據類型
- 創建等間隔一維數組
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)#參數分別爲起始值,終止值,數據數,是否包含stop值,是否顯示間距和數據類型
在這裏插入代碼片
- 使用數字 0 將一個全爲 1 的 5x5 二維數組包圍
Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
- 創建一個 5x5 的二維數組,並設置值 1, 2, 3, 4 落在其對角線下方
Z = np.diag(1+np.arange(4),k=-1)
- 創建一個 10x10 的二維數組,並使得 1 和 0 沿對角線間隔放置
Z = np.zeros((10,10),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
- 創建一個 0-10 的一維數組,並將 (1, 9] 之間的數全部反轉成負數
Z = np.arange(11)
Z[(1 < Z) & (Z <= 9)] *= -1
- 找出兩個一維數組中相同的元素
Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print("Z1:", Z1)
print("Z2:", Z2)
np.intersect1d(Z1,Z2)
- 統計數組各行的算術平均值
np.mean(a, axis=1)
- 統計數組各列的加權平均值
np.average(a, axis=0)
10.統計中位數,方差,標準差等。
11.沿橫 / 縱軸分割數組
np.hsplit(a, 3)
np.vsplit(a, 3)
12.返回每列最大值
np.max(a, axis=0) #行最大值axis = 1
- 返回每列最大值索引
np.argmax(a, axis=0) #最小值是argmin函數
14.找出兩個一維數組中相同的元素
np.intersect1d(Z1,Z2)
15.使用 NumPy 打印昨天、今天、明天的日期
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)
16.數組排序
Z.sort()#升序排序
Z.sort(axis=0)#列升序
17.將 float32 轉換爲整型
Z = np.arange(10, dtype=np.float32)
Z = Z.astype(np.int32, copy=False)
18.將隨機二維數組按照第 3 列從上到下進行升序排列
Z = np.random.randint(0,10,(5,5))#生成一個5行5列數值在0~10之間的數組
Z[Z[:,2].argsort()]
19.交換前兩行可以直接這樣嗎?
A[[0,1]] = A[[1,0]]
20.找出隨機一維數組Z中出現頻率最高的值
np.bincount(Z).argmax()
21.統計隨機數組中的各元素的數量
Z = np.random.randint(0,100,25).reshape(5,5)
np.unique(Z, return_counts=True) # 返回值中,第 2 個數組對應第 1 個數組元素的數量
22.將多個 1 維數組拼合爲單個 Ndarray
Z = np.array([Z1, Z2, Z3])
np.concatenate(Z)
23.使用 NumPy 計算變量直接的相關性係數
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)
24.使用 NumPy 計算矩陣的特徵值和特徵向量
M = np.matrix([[1,2,3], [4,5,6], [7,8,9]])
w, v = np.linalg.eig(M)
# w 對應特徵值,v 對應特徵向量
25.打印九九乘法表
np.fromfunction(lambda i, j: (i + 1) * (j + 1), (9, 9))
26.使用 Numpy 將實驗樓 LOGO 轉換爲 Ndarray 數組
from io import BytesIO
from PIL import Image
import PIL, requests
# 通過鏈接下載圖像
URL = 'https://static.shiyanlou.com/img/logo-black.png'
response = requests.get(URL)
# 將內容讀取爲圖像
I = Image.open(BytesIO(response.content))
# 將圖像轉換爲 Ndarray
shiyanlou = np.asarray(I)
shiyanlou
# 將轉換後的 Ndarray 重新繪製成圖像
from matplotlib import pyplot as plt
%matplotlib inline
plt.imshow(shiyanlou)
plt.show()
27.幾個常用的函數
flat #返回
np.nonzero([1,0,2,0,1,0,4,0])#返回一維數組中非 0 元素的位置索引
np.dot(A, B)#矩陣相乘
np.power(x,4)#對x數組的每個值4次方
np.set_printoptions(precision=2)#對於二維隨機數組中各元素,保留其 2 位小數
Z/1e3#科學記數法輸出 NumPy(Z) 數組
a.argsort()#打印各元素在數組中升序排列的索引
a.real #屬性,數組a的實部
a.imag #屬性,數組a的虛部
numpy.linalg.inv()# 函數計算矩陣的乘法逆矩陣。
numpy.linalg.solve() #函數給出了矩陣形式的線性方程的解。
umpy.matlib.eye() #函數返回一個矩陣,對角線元素爲 1,其他位置爲零。
np.c_[M1, M2]#按列連接兩個數組
np.r_[M1, M2]#按行連接兩個數組