zoukankan      html  css  js  c++  java
  • python 在机器学习中应用函数

    浅述python中argsort()函数的用法

    (1).先定义一个array数据

    1 import numpy as np
    2 x=np.array([1,4,3,-1,6,9])

    (2).现在我们可以看看argsort()函数的具体功能是什么:

    x.argsort()

     输出定义为y=array([3,0,2,1,4,5])。

     我们发现argsort()函数是将x中的元素从小到大排列提取其对应的index(索引),然后输出到y。例如:x[3]=-1最小,所以y[0]=3,x[5]=9最大,所以y[5]=5。

     上面这个不难理解,不熟悉的可以去python环境下自己尝试。

     (3).由于在程序中遇到了类似于np.argsort()[num]的形式,一直看不明白,就自己去python环境自己试了下:

     ps:这里的num的绝对值小于等于x中元素的个数

     当num>=0时,np.argsort()[num]就可以理解为y[num];

     当num<0时,np.argsort()[num]就是把数组y的元素反向输出,例如np.argsort()[-1]即输出x中最大值对应的index,np.argsort()[-2]即输出x中第二大值对应的index,依此类推。。

     直观的实验才能看到效果,下面是我拿上面例子做的验证:

    这是当num为负值时的输出

    这个是num>=0时的输出。

    2.Python-Numpy的tile函数用法

    (1).函数的定义与说明

      函数格式tile(A,reps)

      A和reps都是array_like

      A的类型众多,几乎所有类型都可以:array, list, tuple, dict, matrix以及基本数据类型int, string, float以及bool类型。

      reps的类型也很多,可以是tuple,list, dict, array, int, bool.但不可以是float, string, matrix类型。

    (2).函数操作示例

    >>> tile(1,2)
    array([1, 1])
    >>> tile((1,2,3),3)
    array([1, 2, 3, 1, 2, 3, 1, 2, 3])
    >>> tile(a,2)
    array([[1, 2, 3, 1, 2, 3],
           [4, 5, 5, 4, 5, 5]])
    >>> b=[1,3,5]
    >>> tile(b,[2,3])
    array([[1, 3, 5, 1, 3, 5, 1, 3, 5],
           [1, 3, 5, 1, 3, 5, 1, 3, 5]])
    >>> a=[[1,2,3],[5,4]]
    >>> tile(a,[2,3])
    array([[[1, 2, 3], [5, 4], [1, 2, 3], [5, 4], [1, 2, 3], [5, 4]],
           [[1, 2, 3], [5, 4], [1, 2, 3], [5, 4], [1, 2, 3], [5, 4]]])

    3.python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法:

    复制代码
    #创建一个宽度为3,高度为4的数组
    #[[0,0,0],
    # [0,0,0],
    # [0,0,0],
    # [0,0,0]]
    myList = [[0] * 3] * 4
    复制代码

    但是当操作myList[0][1] = 1时,发现整个第二列都被赋值,变成

    [[0,1,0],

    [0,1,0],

    [0,1,0],

    [0,1,0]]

    为什么...一时搞不懂,后面翻阅The Python Standard Library 找到答案

    list * n—>n shallow copies of list concatenated, n个list的浅拷贝的连接

    例:

    复制代码
    >>> lists = [[]] * 3
    >>> lists
    [[], [], []]
    >>> lists[0].append(3)
    >>> lists
    [[3], [3], [3]]
    复制代码
       

    [[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用,修改任何

    一个元素都会改变整个列表:

    所以需要用另外一种方式进行创建多维数组,以免浅拷贝:

    复制代码
    >>> lists = [[] for i in range(3)]
    >>> lists[0].append(3)
    >>> lists[1].append(5)
    >>> lists[2].append(7)
    >>> lists
    [[3], [5], [7]]
    复制代码
       

    之前的二维数组创建方式为:

    myList = [([0] * 3) for i in range(4)
       

    4.python zeros()使用(from numpy import *)

    该函数的功能是创建给定类型的矩阵,并初始化为0。

    复制代码
    #一维数组  
    zeros(3)  
    #二维数组  
    zeros((2,3))  
    #或  
    zeros([2,3])
    复制代码

     

    dtype:数组数据类型,默认为float

    复制代码
    #使用默认类型  
    b=zeros(3)  
    type(b)  
    #转换为int类型  
    b=zeros(3)  
    type(b)  
    复制代码

     

    zeros_like:返回和输入大小相同,类型相同,用0填满的数组

    复制代码
    <pre name="code" class="python">
    #一维 a=array([2,3]) zeros_like(a) #二维 a=array([[2,3],[3,4]]) zeros_like(a)
    复制代码

     

    ones_like:返回和输入大小相同,数据类型相同,用1填满的数组

    复制代码
    #一维  
    a=array([2,3])  
    ones_like(a)  
    #二维  
    a=array([[2,3],[3,4]])  
    ones_like(a) 
    复制代码

     

    empty_like:返回和输入大小相同,数据类型相同,但是是未初始化的数组(数据随机)

    复制代码
    #一维  
    a=array([2,3])  
    empty_like(a)  
    empty_like(a, int)  
    #二维  
    a=array([[2,3],[3,4]])  
    empty_like(a)  
    empty_like(a, int)  
    复制代码

     

    ones:返回一个和输入大小相同,数据类型相同,初始化为1的数组

    np.ones(5)
    np.ones((2,1))
    s=(2,2)
    np.ones(s)

     

    empty:返回一个新的未初始化的数组

    np.empty([2,2])
    np.empty([2,2],dtype=int)

     

  • 相关阅读:
    Java实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/cmybky/p/11772488.html
Copyright © 2011-2022 走看看