zoukankan      html  css  js  c++  java
  • 机器学习_第一节_numpy

    今天学了机器学习第一节, 希望能够坚持下去,其实不在乎课程是什么?关键要坚持下去

    今天主要学了对矩阵的一些操作, 用的库是numpy

    开始从头到尾捋一遍, 作者说的很有道理,学计算机,动手能力要强,所以以后尽量不要用pycharm,养成了不好的习惯

    1.首先,第一个是导入库 import numpy

    然后接下来我们创建一个矩阵: 用array方法

    import numpy
    vector = numpy.array([5, 10, 15, 20])  #一维矩阵

    matrix = numpy.array([[5, 10, 15], [25, 30, 35], [40, 45, 50]])  #多维矩阵 注意中间的[]
    print (matrix)

    2.判断矩阵的类型 这里用的是shape方法

    print(vector)

    print(matrix.shape)

    3.判断矩阵的类型 , 这里用的是dtype方法

    vector.dtype

    4.取值 这个是矩阵操作中比较重要的方法 有切片操作

      4.1 取单一元素

    matrix = numpy.array([[5, 10, 15], [25, 30, 35], [40, 45, 50]])    
    number = matrix[1,2]    #打印结果是35 [ , ] 与C语言一样, 默认取值从0开始 , 所以取得是第1行第二列的元素
    print(number)

      4.2 去切片元素

    vector = numpy.array([5, 10, 15, 20.0])
    print(vector[0:3])      #这个与python一致, [ : ] 默认取得是一行的元素,所以结果是5 10 15

      4.3 按列取值

    matrix = numpy.array([
    [5, 10, 15],
    [25, 30, 35],
    [40, 45, 50]])
    print(matrix[:,1])          #这个是[ : , : ] 前面代表的是行, 后面代表的是列 所以这个取得是全部第二列的元素 ,结果是10 30 45

      4.4

    matrix = numpy.array([
    [5, 10, 15],
    [25, 30, 35],
    [40, 45, 50]])
    print(matrix[:,0:2])   #跟上面一致, 这个取得是 0, 1列的元素

      4.5

    matrix = numpy.array([
    [5, 10, 15],
    [25, 30, 35],
    [40, 45, 50]])
    print(matrix[1:3,0:2])  #这个就是取1,2行 0, 1列的元素, 结果是[25 30] [40 45]

    5.判断一个矩阵是否有需要的值,返回还是一个矩阵,只是里面的值是bool类型

    vector = numpy.array([5, 10, 15, 20.0])
    vector == 10  #返回结果  array([False, True, False, False])

      5.1通过返回的值, 可以找到元素的值 这个意义不大

    vector = numpy.array([5, 10, 15, 20])

      5.2 通过返回的值, 可以找到所在元素的列和行 这个很有意义

    matrix = numpy.array([
    [5, 10, 15],
    [25, 30, 35],
    [40, 45, 50]])

    second_column_25 = (matrix[ : ,1] ==30)
    print(second_column_25)
    print(matrix[second_column_25, :])

    6 and 和 or 操作

    vector = numpy.array([5, 10, 15, 20])
    equal_ten_five = (vector == 5) & (vector == 10)
    print(equal_ten_five)

    vector = numpy.array([5, 10, 15, 20])
    equal_ten_five = (vector == 5) | (vector == 10)
    print(equal_ten_five)

    7 astype 转换方法 比如 将str类型 转换为 float类型 比较重要

    vector = numpy.array(["1", "2", "3"])
    print(vector.dtype)
    print(vector)
    vector = vector.astype(float)
    print(vector.dtype)
    print(vector)

    8. sum方法 这个可以指定行和列相加得到新的矩阵

    matrix = numpy.array([
    [5, 10, 15],
    [25, 30, 35],
    [40, 45, 50]])
    matrix.sum(axis = 1)  #将列表的axis = 1 表示行相加,  axis = 0表示列相加array([ 30, 90, 135]) 

    9.这条包含的信息量比较大, 一是我们可以简写:numpy as np ,2. 可以创建一个列表arange ( )  3.将列表转换成我们需要的行和列, 用reshape( , )方法

    import numpy as np
    print(np.arange(15))
    a = np.arange(15).reshape(3,5)
    10 看矩阵的维度, 实际应该+1  用 a.ndim

    11看矩阵的元素的个数 a.size

    12 创建一个全是0的矩阵 用zeros( ( , ))方法

    b = np.zeros((3,4))
    print(b)

    13 创建一个全是1的矩阵 np.ones((2,3,4), dtype =np.int32)

    14 创建一个列表, 从10 - 30 , 不包含30 并且每次叠加5, np.arange(10, 30, 5)

    15 生成一个0-1的随机数列表  random.random((, ))  np.random.random((2,3))

    16 自动生成一个平均分的列表 从0-2*pi, 100个元素, 慢慢增加到2*pi

    from numpy import pi
    np.linspace(0, 2*pi, 100)

    17矩阵的加减 矩阵的加减与数学上一致

    a = np.array([20, 30, 40, 50])
    b = np.arange(4)
    print(a)
    print(b)
    c = a - b
    print(c)
    c = c - 1
    print(c)
    b ** 2
    print(b **2)
    print(a < 35)

    18 矩阵的乘法 如果是* 直接元素与元素相乘, 实现数学上的方法需要.dot方法

    A = np.array([[1,1],
    [0,1]])
    B = np.array([[2,0],
    [3,4]])
    print(A)
    print("-------")
    print(B)
    print("-------")
    print(A*B)
    print("-------")
    print(A.dot(B))
    print("-------")
    print(np.dot(A,B))

    19 对元素开根号 或者 求e运算

    B = np.arange(3)
    print(B)
    print(np.exp(B))
    print(np.sqrt(B))

    20. 重要的是将列表变成 向量 ravel 方法, 还有一个矩阵的转置 .T方法

    a = np.floor(10*np.random.random((3,4)))
    print(a)
    print("----------------")
    print(a.ravel())
    print("----------------")
    a.shape = (6,2)
    print(a)
    print("----------------")
    print(a.T)

    21 一个是取整方法floor(), 还有一个是矩阵的拼接, hstack是行拼接 vstack是列拼接

    a = np.floor(10*np.random.random((2,2)))
    b= np.floor(10*np.random.random((2,2)))
    print(a)
    print("---------")
    print(b)
    print("---------")
    print(np.hstack((a,b)))
    print("---------")
    print(np.vstack((a,b)))

    22 矩阵的切分, 主要是将矩阵按照列切分 vsplit( )和按照行切分 hsplit( ),

    a = np.floor(10*np.random.random((2,12)))
    print(a)
    print("-------------")
    print(np.hsplit(a,3))
    print("-------------")
    print(np.hsplit(a,(3,4)))
    a = np.floor(10*np.random.random((12,2)))
    print(a)
    print("-------------")
    print(np.vsplit(a,3))

    23 矩阵的复制 有三种办法

      23.1 第一种是 = , 两个矩阵共用内存地址, 改变一个, 另一个也改变

    a = np.arange(12)
    b = a
    print(b is a)
    b.shape = 3, 4
    print(a.shape)
    print(id(a))
    print(id(b))

      23.2 浅复制 第二种是.view( ), 两个矩阵不共用内存, 但是指向的值是一样的

    c = a.view()
    print(c is a)
    c.shape = 2,6
    print(a.shape)

    c[0,4] = 1234
    print(c)
    print("--------------")
    print(a)

      23.3 指向不一样, 指向的值也不一样.copy()

    d = a.copy()
    print(d is a)
    d[0,0] = 9999
    print(d)
    print(a)

    24 寻找一个矩阵的各行最大值

    data = np.sin(np.arange(20)).reshape(5, 4)
    print(data)
    ind = data.argmax(axis = 0)
    print(ind)
    data_max = data[ind, range(data.shape[1])]  #不太理解, 但是照做就行 可以打印出来
    print(data_max)

    25扩充一个矩阵 .tile方法

    a = np.arange(0, 40, 10)
    print(a)
    b = np.tile(a, (4,3))
    print(b)

    26 对一个矩阵每行每列进行排序

    a = np.array([[4, 3, 5],
    [1, 2, 1]])
    print(a)
    b = np.sort(a, axis = 1)
    print(b)
    a.sort(axis = 1)
    print("---------")
    print(a)
    a = np.array([4, 3, 1, 2])
    j = np.argsort(a)
    print("----------")
    print(j)
    print("----------")
    print(a[j])

    哈哈哈, 终于写完了, 这是今天所学的知识, 一定要坚持下去......洗洗睡吧

  • 相关阅读:
    hdu 3666 差分约束系统
    hdu 1198农田灌溉
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    高等微積分(高木貞治) 1.4節 例2
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    解析函數論 Page 29 命題(2) 函數模的有界性
    高等微積分(高木貞治) 1.4節 例2
    解析函數論 Page 29 命題(1) 有界閉集上的一致連續性
    解析函數論 Page 29 命題(3) 模的下界的可達性
    解析函數論 Page 29 命題(2) 函數模的有界性
  • 原文地址:https://www.cnblogs.com/jly1/p/9663653.html
Copyright © 2011-2022 走看看