机器学习笔记(一):python 模块 numpy

今天开始系统的学习机器学习了, 写下这个笔记,作为自我监督,也希望能帮到同在学习的人。

要学机器学习,少不了数学和计算,先从学习和使用python 开始吧。

python关系数学计算的numpy就是我首先学习的,之前接触过matlab,所以会觉得numpy非常的相似。

1。numpy读取txt文件 genfromtxt(’ 文件地址 ’ , delimiter='分隔符 ’ , dtype=数据类型)

第一个参数可以是相对地址,或者绝对地址。 分隔符一般就是‘,‘ 或者‘ ‘ 具体根据文件中的存储规则来,第三个参数指的是文件中存储的数据读取到python后的数据类型。

程序:

 文件中的内容
	 hello I'm chenxiaoze
	 where are you

代码:

import numpy as np
A = np.genfromtxt('/Users/Chenxz/Desktop/2.txt',delimiter=' ',dtype='str')
print(A)

得到的是一个数组:

[['hello' "I'm" 'chenxiaoze']
 ['where' 'are' 'you']]

这个方法在对大量规则存储的文件有奇效,目前接触到的读取文件的方法只有这一种,以后接触到了会陆续补充。

#2。矩阵

矩阵可以说是线性代数中巨大的一块了,也是机器学习中异常丰富的存在。

构造一个矩阵:(矩阵的成员需要时同一类型)

import numpy
A = numpy.array([1,2,3])   #一维矩阵(向量)
B = numpy.array([[1,2,3],[4,5,6],[7,8,9]]) #二维矩阵 

构造一些特殊的矩阵:

import numpy as np
#全0矩阵 
A = np.zeros((1,3))   #[[ 0.  0.  0.]]  全0矩阵 
print('A中元素的类型是:',A.dtype,A.dtype.name) #float64默认类型
#全1矩阵
B = np.ones(3)   #[ 1.  1.  1.]  全1矩阵   一个参数默认1行
B = np.ones((2,2))  #[[ 1.  1.]
                    # [ 1.  1.]]
#随机矩阵
C = np.random.random((2,2)) #随机矩阵  随机构造0-1内的2行2列矩阵   
D = np.arange(10)    #产生0-9整数[0 1 2 3 4 5 6 7 8 9]
import math
E = np.linspace(0,2*math.pi,10)  #在0-2pi之间平均找10个数  不包括2pi 即>=0   <2pi
print(E)

矩阵取值

A[0]  
B[2] #表示整个第3行   7.8.9
B[1,2] #第二行第3个   6

print(B[[1,1],[2,2]])   #输出 B[1,2] 和 B[1,2]

#下面是用true取值
Arr = numpy.array([1,2,3,2,2]) 
A = Arr == 2     # 得到: [False  True False  True  True]
print(A)
print(Arr[[False,True,False,True,True]])   # 竟然也可以这样取值
print(Arr[A])   #所以这样也行
print(Arr[Arr]) #[2 3 2 3 3]    厉害了吧

矩阵的一些属性值

print(B.mean(),B.max(),B.min()) # 矩阵中   平均值 ,最大值 ,最小值

print(A.ndim)  #查看维数 1
print(B.ndim)  #2
print('B的行数烈数: ',B.shape)  #求矩阵的行数列数,返回的是tuple类型   B:  (3, 3)
print('B中总的元素个数:',B.size)  #9
print('A中元素的类型是:',A.dtype) #int64

矩阵运算:

import numpy as np
A = np.array([[1,1],[2,2]])
B = np.array([[3,3],[4,4]])

print(A.ravel())  #[1 1 2 2]二维=>一维   把矩阵=>向量


print(A*B)     #同位置的元素相乘   [[3 3],[8 8]]
print('方法1:',A.dot(B),'方法2:',np.dot(A,B))  #矩阵的乘法 , 左行右列,两种方法都行 [[ 7  7],[14 14]]

print(np.exp(A))   #对A中每个元素x都  e^x 然后返回值
print(np.sqrt(A))  #对A中每个元素x都 开方

矩阵拆分

#矩阵拼接  (水平拼接 ,垂直拼接)
'''
A= 1  1     B = 3  3
   2  2         4  4
'''  
C = np.hstack((A,B))   #[[1, 1, 3, 3],
                       # [2, 2, 4, 4]]) 
D = np.vstack((A,B))      #  [[1, 1],
                          #  [2, 2],
                          #  [3, 3],
                          #  [4, 4]]
#矩阵拆分  (水平拆分 ,垂直拆分)
np.hsplit(C,2)   #把C在水平方向拆成2份   hsplit(C,3)报错,因为C的行数不是3的倍数
'''
                    [array([[1, 1],
                            [2, 2]]), array([[3, 3],
                                             [4, 4]])]
'''

np.vsplit(C,2)   # [array([[1, 1, 3, 3]]),  array([[2, 2, 4, 4]])]
np.hsplit(C,(1,2))   #水平方向上(第一列,第二列后面切一刀)
'''
                    [array([[1],
                            [2]]), array([[1],
                                          [2]]), array([[3, 3],
                                                        [4, 4]])]
'''

矩阵复制

#矩阵复制

#1. A就是B ,B就是A,相当于别名  (诸葛亮和孔明)

A= np.array([[1,1],[2,2]])
B = A;
A[1,1] = 100
#A变 B也会变
print(B)   #[[  1   1]
          #  [  2 100]]
    
print(A is B,id(A),id(B))  #True 4621128128 4621128128   两者完全相同


#2. A,B 不同,但是指向的地方一样 (诸葛亮和关羽,都是为了刘家天下)

A= np.array([[1,1],[2,2]])
B = A.view()
A[1,1] = 100
#A变 B也会变   刘备死了,诸葛亮和关羽虽然不是一个人但是都不开心
print(B)   #[[  1   1]
          #  [  2 100]]

print(A is B,id(A),id(B))      # False 4620750160 4621128128
#3  A,B完全不同
A= np.array([[1,1],[2,2]])
B = A.copy()
A[1,1] = 100

#A变 B不变
print(B)   #[[  1   1]
          #  [  2   2]]
print(A is B,id(A),id(B))      # False 4621128128 4621147072

矩阵的一些操作:

A.T   #转置A
#矩阵元素类型转换 可以连续转换
A.astype(int).astype(float)  #bool = > int => float

import numpy as np
A = numpy.array([5,1,2,3])   #一维矩阵(向量)
B = numpy.array([[4,5,6],[1,2,3],[7,8,9]]) #二维矩阵 

B.sum()  # 全部求和
B.sum(0) # [12, 15, 18]   每一列求和
B.sum(1) # array([15,  6, 24])  每一行求和

A.reshape(1,4)    #array([[5, 1, 2, 3]])  重新设置行列,但是size不能改变,即总元素不变
B.argmax()  #和下面的一样
np.argmax(B)  #  8  找到最大那个值的下标,因为二维返回的也是一个数字,所以不方便

B = numpy.array([[4,15,6],[1,2,13],[7,8,9]]) 

# [ 4, 15,  6],
# [ 1,  2, 13],
# [ 7,  8,  9]

B.argmax(0) #  [2, 0, 1]      每一列的最大值的坐标 (2,0)  (0,1)  (1,2)

print(B[B.argmax(0),np.arange(0,B.shape[1])])  #[ 7 15 13]
 
np.argmax(B,1)  #  [1, 2, 2】  每一行的最大值  (0,1)  (1,2)  (2,2)
print(B[np.arange(0,B.shape[1]),B.argmax(1)])   #[15 13  9]

矩阵扩展

这里写图片描述

矩阵排序:

import numpy as np
B = numpy.array([[4,5,6],[1,2,3],[7,8,9]]) #二维矩阵 

#每一列排序后的下标
C = numpy.argsort(B,0)   #[1, 1, 1],
                         #[0, 0, 0],
                         #[2, 2, 2]   对应的是数字的下标

#每一行排序后的下标
D = numpy.argsort(B,1)    #[0, 1, 2],
                          #[0, 1, 2],
                          #[0, 1, 2]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值