• 机器学习_第一节_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])

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

  • 相关阅读:
    部署 AppGlobalResources 到 SharePoint 2010
    还原一个已删除的网站集
    使用仪表板设计器配置级联筛选器 (SharePoint Server 2010 SP1)
    File or arguments not valid for site template
    Pex and Moles Documentation
    Content Query Webpart匿名访问
    Running Moles using NUnit Console from Visual Studio
    Calling a WCF Service using jQuery in SharePoint the correct way
    Updating Content Types and Site Columns That Were Deployed as a Feature
    asp.net中判断传过来的字符串不为空的代码
  • 原文地址:https://www.cnblogs.com/jly1/p/9663653.html
Copyright © 2020-2023  润新知