zoukankan      html  css  js  c++  java
  • Python手记

    字符串的拼接
    1.“+”,如果是字符和数字相连,要使用str()函数对于数字进行字符转化;
    2.join()
    3.",",链接的两个字符串之间用空格做关联
    4.占位符
    tmp +=1
    #print 'r'%tmp
    print("row num is: %s"%(tmp))
    print('value is: %s; RowNum is: %s'%(cellValue,rowNo)) #多个占位
     
    python的全局变量
    第一种是def consts()中进行定义(函数名自定义),在使用时记得首先要consts()一下。
    def consts():
    global rowNum
    consts()
    print(str(rowNum))
     
    乱码问题
    在windows下面,Python输出到控制台,打出来的汉字是乱码解决方案:
    1. 直接汉字处理,直接在前面添加“u"即可:
    print (u'哈哈你好')
    2. 如果汉字付给了变量:
    string='哈哈你好'  
    print string.decode('UTF-8') 
     
    def test():
    global rowNum
    rowNum=rowNum+1
    print(rowNum)
    这里注意在常量函数中声明全局变量的时候,要使用global,如果在另外一个函数里面要使用,而且需要修改,也要声明global,告知编译器我修改的是全局变量,否则会报错;但是在主函数中使用则不需要。
    第二种是定义一个外部文件,再import 进来

    python异常处理

    import traceback
    try:
    ....
    except Exception, e:
    print 'traceback.print_exc():'; traceback.print_exc()
    Python文件处理
    file = open(“D:WorkspaceOperation_FivesourceCodesrc estdataStatsGroupInfosubscriber”)
    python的文件的读入报错:
    IOError: [Errno 22] invalid mode ('r') or filename: 'F:\Dropbox\python est.txt'
    是因为这里有 这样的转义字符;所以需要进行处理,在前面添加r,并使用单引号:
    file = open(r'D:WorkspaceOperation_FivesourceCodesrc estdataStatsGroupInfosubscriber')
     
    关于“//”
    实操机器学习的时候,发现了下面的写法:
    train_data["AgeBucket"] = train_data["Age"] // 15 * 15
    train_data[["AgeBucket", "Survived"]].groupby(['AgeBucket']).mean()
    默然一看// 15*15还以为是注解;其实不然,是python里面特有的写法,代表除以15之后,向下取整,这种算法也称之为地板除。
     

    zip
    a = np.array(['a', 'b', 'c', 'd'])
    b = np.array([2,4,6,8,10])
    for i1, i2 in zip(a, b):
    print("{}, {}".format(i1, i2))

    zip用于将数组对象打包,可以用于遍历等操作。

    numpy库中的random

    首先要明白randomd对象生成的数据永远都是小于的,如果想要大于1自己处理去。比如astype(np.int32),将小数进行四舍五入取整数;比如可以*10,放大十倍等
    一般的玩法是:
    1 import numpy.random as rnd
    2 rnd.rand(row_num, col_num) #随机生成row_now行,col_num列的二维数组(矩阵)
    3 rnd.random(num) #随机生成num个数(小于1的)
    4 rnd.randn(row_num, col_num) #数据满足正态分布,随机生成row_now行,col_num列的二维数组(矩阵)

     python参数中的*和**

    def method(* args, ** kwargs)
    args的格式是元组:method("first parameter", "second parameter"...)
    kwargs的格式是字典的:method(firstParam="first parametger", secondParameter="second paramerter“ ...)

     数据转化为float

    从文件中获取数据,如果转成numpy的array默认是String类型,如果转化为float?

    1 datas=array(line.split())
    2 datas=datas.astype(np.float)

    注意这里astype并不会改变当前数组,而是改变返回值的数据类型;所以需要有一个接收值。

    nonzero

    在python的numpy里面这个函数的意义是返回参数数组中不为0的元素的索引(indics)。
    from numpy import array
    1 from numpy import nonzero 
    2 x=array([[1,0,0], [0,2,0], [1,1,0]]) 
    3 print(x) 
    4 nonzero(x)

     output:

    [[1 0 0] [0 2 0] [1 1 0]] (array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))
    这个是要把两行捏在一起来看:
    [0,1,2,2]
    [0,1,0,1]
    代表作为二维数组[0,0],[1,1],[2,0],[2,1]四个位置的元素不为0,也就说返回的一个数组是行信息,第二个数组对应的列信息,组合在一起就是一个(x,y)坐标。
     argsort
    numpy里面的函数,用于对于数据进行排序。argsort里面有一个参数axis,axis=0代表沿着纵轴进行排序,axis=1代表沿着横轴进行排序。
    1 ar = array([[1,2],[4,3],[2,3],[0,1]])
    2 br = ar.argsort(0)
    3 br

    输出的为:

     
    array([[3, 3],
           [0, 0],
           [2, 1],
           [1, 2]], dtype=int64)

     这里大家注意了,ar的形式如下:

    0)  1  2

    1)  4  3

    2)  2  3

    3)  0  1

    axis=0就是代表沿着纵向进行排序(从小到大),3)排名第一,0)排名第二,2)排名第三...,所以我们看到返回值,第一列是3,0,2,1;第二个维度(特征)继续排序,但是第二个维度排序,第二个维度值是2,3,3,1,下面对于这四个数进行排序,最小的索引是3),第二个小的索引0)一次类推;分别对于两个维度的特征进行了排序。所以可以理解axis=0就是基于特征的排序。

    那么axis=1呢?那就是横向排序,即按照行进行排序:

    1 ar = array([[1,2],[4,3],[2,3],[0,1]])
    2 br = ar.argsort(1)
    3 br

    返回值:

    array([[0, 1],
    [1, 0],
    [0, 1],
    [0, 1]], dtype=int64)

    按照行来进行排序,或者说只是行内进行排序,上面的argsort(0)则是列内进行排序,可以这么理解,argsort(1)是样本内部各个特征值的排序,argsort(0)则是样本间的特定特征值的排序。

     python plot中的数组

    如果是plot直接扔进去一个数组将会发生什么?
    import numpy 
    arr = numpy.array([[1,2,3],[7,8,9]]) 
    print(arr) 
    from matplotlib import pyplot as plt 
    plt.figure(figsize=(12, 4)) 
    plt.plot(arr) 
    plt plt.show()

     输出如下:

    [[1 2 3]
    [7 8 9]]
    此时走的plot函数就是如下红框范围的api
    如果plot直接收了一个数组(正常情况应该是上图1的api参数),那么plot函数会认为传入的是y值的数据,x值将会被处理为样本的索引;那么代码中数据中第一个数据点[1,2,3]将会被处理为:[0,1],[0,2],[0,3],第二个数据将会被处理为[1,7],[1,8,],[1,0],然后纵向进行点组合[0,1]和[1,7]做线性组合,[0,2]和[1,8]做线性组合,以此类推。

     

  • 相关阅读:
    3D有向包围盒与球体碰撞的算法
    搞笑段子,纪念我那逝去已久的大学生活
    [22] 计算几何图形包围盒与包围球的算法
    [21] Mesh法线的生成算法
    [20] 鼓状物(Drum)图形的生成算法
    [19] 半球形(Hemisphere)图形的生成算法
    [18] 螺旋楼梯(Spiral Stairs)图形的生成算法
    MySQL中MyISAM与InnoDB区别及选择,mysql添加外键
    在sublime3中docblockr插件配置apidoc接口文档注释模板
    sublime3 docblocker插件定制自己的注释,配置步骤
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/7398115.html
Copyright © 2011-2022 走看看