ML初探

mac2022-06-30  20

使用array创建数组

通过array函数传递list对象

1 L = [1,2,3,4,5,6] 2 print(L) 3 a = np.array(L) 4 print(a) 5 print(type(a)) 6 7 #[1, 2, 3, 4, 5, 6] 8 #[1 2 3 4 5 6] 9 #<class 'numpy.ndarray'>

 

若传递的是多层嵌套的list,将创建多维数组

1 b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]) 2 print(b) 3 4 # [[ 1 2 3 4] 5 # [ 4 5 6 7] 6 # [ 7 8 9 10]]

 

数组大小可以通过其shape属性获得

b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]) print(b.shape) # (3, 4) b.shape = (4,3) print(b) # 从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小 """ [[ 1 2 3] [ 4 4 5] [ 6 7 7] [ 8 9 10]] """ # 当某个轴为-1时,将根据数组元素的个数自动计算此轴的长度 b.shape = (2,-1) print(b) """ [[ 1 2 3 4 4 5] [ 6 7 7 8 9 10]] """

 

reshape方法

# 使用reshape方法,可以创建改变了尺寸的新数组,原数组的shape保持不变 c = b.reshape((4,-1)) print(b) print(c) """ [[ 1 2 3 4] [ 4 5 6 7] [ 7 8 9 10]] [[ 1 2 3] [ 4 4 5] [ 6 7 7] [ 8 9 10]] """ # 数组b和c共享内存,修改一个将影响另外一个 b[0][1] = 20 print(b) print(c) """ [[ 1 20 3 4] [ 4 5 6 7] [ 7 8 9 10]] [[ 1 20 3] [ 4 4 5] [ 6 7 7] [ 8 9 10]] """

 

数组的元素类型

b = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]]) print(b.dtype) # int32 # 可以通过dtype参数在创建时指定元素类型 d = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]],dtype=np.float) f = np.array([[1+2j,2,3,4],[5,6,7,8],[9,10,11,12]],dtype=np.complex) print(d) print(f) """ [[ 1. 2. 3. 4.] [ 5. 6. 7. 8.] [ 9. 10. 11. 12.]] [[ 1.+2.j 2.+0.j 3.+0.j 4.+0.j] [ 5.+0.j 6.+0.j 7.+0.j 8.+0.j] [ 9.+0.j 10.+0.j 11.+0.j 12.+0.j]] """ # 如果更改数据类型,可以使用astype安全的转换 f = d.astype(np.int) print(f) """ [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] """ # 不要强制仅修改元素类型 d.dtype = np.int print(d) """ [[ 0 1072693248 0 1073741824 0 1074266112 0 1074790400] [ 0 1075052544 0 1075314688 0 1075576832 0 1075838976] [ 0 1075970048 0 1076101120 0 1076232192 0 1076363264]] """

使用函数创建数组

arange

# arange函数类似于python的range函数:指定起始值、终止值、步长来创建数组 # arange不包括终值;但可以生成浮点类型 a = np.arange(1,10,0.5) print(a) # [1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. 5.5 6. 6.5 7. 7.5 8. 8.5 9. 9.5]

linspace

# linspace函数通过指定起始值、终止值、元素个数来创建数组,缺省包括终止值 b = np.linspace(1,10,10) print(b) # [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] # 可以通过endpoint关键字指定是否包括终止值 c = np.linspace(1, 10, 10, endpoint=False) print(c) # [1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]

logspace

# 下面函数创建起始值为10^1,终止值为10^2,有10个数的等比数列 d = np.logspace(1,2,10,endpoint=True) print(d) """ [ 10. 12.91549665 16.68100537 21.5443469 27.82559402 35.93813664 46.41588834 59.94842503 77.42636827 100. ] """

frombuffer fromstring fromfile

# 使用frombuffer fromstring fromfile等函数可以从字节序列创建数组 s = 'abcd' g = np.fromstring(s,dtype=np.int8) print(g) # [ 97 98 99 100]

数组元素存取

常规办法:切片(左闭右开)

切片数据是原数据的一个视图,与原数组共享内存空间,可以直接修改元素

因此,在实践中,切实注意原始数据是否被破坏

整数/布尔数组存取

根据整数数组存取:当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表或者数组使用整数序列作为下标获得的数组不和原始数组共享内存空间

a = np.logspace(0,9,10,base=2) i = np.arange(0,10,2) print(a) print(i) """ [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.] [0 2 4 6 8] """ # 利用i取a中的元素 b = a[i] print(b) # [ 1. 4. 16. 64. 256.] # b的元素更改,a中的元素不受影响 b[2] = 1.6 print(b) print(a) """ [ 1. 4. 1.6 64. 256. ] [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.] """

使用布尔数组i作为下标存取数组a中的元素:返回数组a中所有在数组b中对应下标

# 生成10个满足[0,1)中均匀分布的随机数 a = np.random.rand(10) print(a) """ [0.4462478 0.03723116 0.96720692 0.90089833 0.15556398 0.0706548 0.02618482 0.06861084 0.63877027 0.71244475] """ # 大于0.5的元素索引 print(a>0.5) # [False False True True False False False False True True] # 大于0.5的元素 b = a[a>0.5] print(b) # [0.96720692 0.90089833 0.63877027 0.71244475] # 将原数组中大于0.5的元素截取成0.5 a[a>0.5] = 0.5 print(a) """ [0.4462478 0.03723116 0.5 0.5 0.15556398 0.0706548 0.02618482 0.06861084 0.5 0.5 ] """

二维数组的切片

a = np.arange(0,60,10).reshape((-1,1))+ np.arange(6) print(a) """ [[ 0 1 2 3 4 5] [10 11 12 13 14 15] [20 21 22 23 24 25] [30 31 32 33 34 35] [40 41 42 43 44 45] [50 51 52 53 54 55]] """ # 二维数组的切片 print(a[(0,1,2,3),(2,3,4,5)]) # [ 2 13 24 35] # (0,2),(1,3)(2,4),(3,5)位置元素 print(a[3:,[0,2,5]]) """ [[30 32 35] [40 42 45] [50 52 55]] """ # 第3到最后一行,第0/2/5列元素 i = np.array([True,False,True,False,False,True]) print(a[i]) # 0,2,5行 """ [[ 0 1 2 3 4 5] [20 21 22 23 24 25] [50 51 52 53 54 55]] """ print(a[i,3]) # [ 3 23 53] # 0/2/5行,第3列

 绘图

绘制正态分布概率密度函数

import matplotlib.pyplot as plt import matplotlib as mpl # title可以包含中文 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False mu = 0 sigma = 1 x = np.linspace(mu - 3*sigma, mu+3*sigma,50) y = np.exp(-(x-mu)**2/(2*sigma**2)) / (math.sqrt(2*math.pi)*sigma) plt.plot(x,y,'r-',x,y,'go',label='正态分布概率密度函数',linewidth=2) plt.legend(loc='upper right') plt.grid(True) plt.title('Guass分布') plt.savefig('Guass分布.png') plt.show()

损失函数:Logistic损失/SVM Hing损失/ 0/1损失/Adaboost损失

x = np.array(np.linspace(start=-2,stop=3,num=1001,dtype=np.float)) y_logit = np.log(1+np.exp(-x)) / math.log(2) y_boost = np.exp(-x) y_01 = x<0 y_hinge = 1.0 - x y_hinge[y_hinge < 0] = 0 plt.plot(x,y_logit,'r-',label='Logistic Loss',linewidth=2) plt.plot(x,y_01,'g-',label='0/1 Loss',linewidth=2) plt.plot(x,y_hinge,'b-',label='Hinge Loss',linewidth=2) plt.plot(x,y_boost,'m--',label='Adaboost Loss',linewidth=2) plt.grid() plt.legend(loc='upper right') plt.savefig('1.png') plt.show()

转载于:https://www.cnblogs.com/pfd9527/p/9676421.html

最新回复(0)