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])

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

  • 相关阅读:
    Emacs for OIer 的一些配置
    CF1336E Chiori and Doll Picking 【线性代数,组合计数】
    CF605E Intergalaxy Trips 【贪心,动态规划,期望】
    Luogu6329 【模板】点分树 | 震波
    [SDOI2014]数表
    [BZOJ4403]序列统计
    [BZOJ5099]Pionek
    SP1812 LCS2
    SA & SAM
    [HAOI2016]找相同字符
  • 原文地址:https://www.cnblogs.com/jly1/p/9663653.html
Copyright © 2011-2022 走看看