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]做线性组合,以此类推。

     

  • 相关阅读:
    Binary Tree Maximum Path Sum
    ZigZag Conversion
    Longest Common Prefix
    Reverse Linked List II
    Populating Next Right Pointers in Each Node
    Populating Next Right Pointers in Each Node II
    Rotate List
    Path Sum II
    [Leetcode]-- Gray Code
    Subsets II
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/7398115.html
Copyright © 2011-2022 走看看