一,Numpy的索引以及切片
-
一维数组索引及切片
ar = np.arange(20) print(ar) print(ar[0]) print(ar[0:2])
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 0 [0 1]
-
二维数组索引及切片
ar = np.arange(20) print(ar) print(ar[0]) print(ar[0:2]) print("-----------") ar = np.arange(16).reshape(4, 4) print(ar) print("-----------") print(ar[0]) # 得到ar中的第一行,是一个一维数组 print(ar[0][0]) # 在一维数组中取值 print(ar[0:2]) # 得到ar中第1,2行的元素,是一个二维数组 print(ar[2, 0]) # 得到ar中第3行第1的元素,同ar[2][0] print(ar[:2, 0:2]) # 得到ar中第1,2行,第1,2列的元素,是一个二维数组
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] 0 [0 1] ----------- [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] ----------- [0 1 2 3] 0 [[0 1 2 3] [4 5 6 7]] 8 [[0 1] [4 5]]
-
三维数组索引及切片
ar = np.arange(8).reshape(2, 2, 2) print(ar) # 得到三维数组 print("-----------") print(ar[0]) # 得到二维数组 print("-----------") print(ar[0][0]) # 得到一维维数组 print("-----------") print(ar[0][0][0]) # 一维数组切片取值
[[[0 1] [2 3]] [[4 5] [6 7]]] ----------- [[0 1] [2 3]] ----------- [0 1] ----------- 0
-
布尔型索引及切片
ar = np.arange(12).reshape(3, 4)
i = np.array([True, False, True])
j = np.array([True, True, False, False])
print(ar)
print("----------------")
print((ar[i, :])) # 这里会根据i这个布尔型的矩阵去筛选行([i, :] = [i])
print("----------------")
print(ar[:, j]) # 这里会根据j这个布尔型的矩阵去筛选列
print("----------------")
m = ar > 5 # 生成一个判断矩阵
print(m)
print(ar[m])
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
----------------
[[ 0 1 2 3]
[ 8 9 10 11]]
----------------
[[0 1]
[4 5]
[8 9]]
----------------
[[False False False False]
[False False True True]
[ True True True True]]
[ 6 7 8 9 10 11]
二,Numpy随机数
numpy.random
包含多种概率分布的随机样本,是数据分析辅助的重点工具之一
-
normal()
生成一个标准正太分布的4*4样本值print(np.random.normal(size=(4, 4)))
[[-0.75805306 -1.10550994 0.58563116 0.69159232] [-0.79607061 -0.62674703 0.50510922 0.02851873] [-1.67733194 -0.14344304 -1.1073622 0.59621208] [-0.08384931 2.23586403 0.32801917 2.13216881]]
-
rand(d0, d1, ..., dn)
:生成一个[0,1)之间的随机浮点数或N维浮点数组 —— 均匀分布a = np.random.rand() print(a) # 生成一个[0,1)之间的浮点数 print(np.random.rand(4)) # 生成一个一维的随机浮点数组 print(np.random.rand(4)*100) # 生成0~100之间的随机浮点数组 print("------------") print(np.random.rand(4, 4)) # 生成一个二维的4*4的随机浮点数组 data1 = np.random.rand(5000) data2 = np.random.rand(5000) import matplotlib.pyplot as plt %matplotlib inline plt.scatter(data1, data2) # 均匀分布图
0.43316183351219784 [0.67844824 0.72220204 0.61572637 0.83903573] [24.41916074 33.48807894 95.66911823 37.33989376] ------------ [[0.86914038 0.51305665 0.72220719 0.30997817] [0.16340544 0.62289361 0.63996127 0.01620125] [0.94574311 0.64496598 0.33538176 0.35390014] [0.27094295 0.87964819 0.17391197 0.6599391 ]]
-
randn(d0, d1, ..., dn)
:生成一个浮点数或N维浮点数组 —— 正态分布import matplotlib.pyplot as plt %matplotlib inline data3 = np.random.randn(5000) data4 = np.random.randn(5000) plt.scatter(data3, data4)
-
randint(low, high=None, size=None, dtype='l')
:生成一个整数或N维整数数组,若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low,dtype参数:只能是int类型print(np.random.randint(2)) # 生成一个[0, 2)之间的整数 print(np.random.randint(2, 10)) # 生成一个[2, 10)之间的整数 print(np.random.randint(2, 10, 10)) # 生成一个[2, 10)之间,一共10个元素的一维数组 print(np.random.randint(2, 50, (4, 4))) # 生成一个[2, 10)之间,4*4个元素的二维数组
1 5 [3 9 4 5 5 2 5 7 4 9] [[20 46 21 47] [10 12 46 34] [11 16 49 45] [49 29 4 13]]
三,Numpy数据的输入输出
-
.npy
文件# 写入 ar = np.random.rand(5,5) np.save('arraydata.npy', ar) # 也可以直接 np.save('C:/Users/Hjx/Desktop/arraydata.npy', ar) # 读取 ar_load =np.load('arraydata.npy') print(ar_load) # 也可以直接 np.load('C:/Users/Hjx/Desktop/arraydata.npy')
-
.txt
文件# 存入 ar = np.random.rand(5,5) np.savetxt('array.txt',ar, delimiter=',') # np.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# '):存储为文本txt文件 # 读写 ar_loadtxt = np.loadtxt('array.txt', delimiter=',') print(ar_loadtxt) # 也可以直接 np.loadtxt('C:/Users/Hjx/Desktop/array.txt')
-
np.savetxt(fname, X, fmt=’%.18e’, delimiter=’ ‘, newline=’\n’, header=’’, footer=’’, comments=’# '):存储为文本txt文件