• Python数据处理——numpy_3


    通过前面两次的学习,基本上对numpy有了一定的认识,所以,接下来进一步对numpy学习。同时,最后以一个有趣的例子加深对numpy的理解。

    import numpy as np
    xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
    yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
    cond = np.array([True, False, True, True, False])
    # 如果cond中的值是T时,选取xarr的值,否则从yarr中选取。这种模式就是:x if condition else y (condition与x相等,就选x,否则y)
    result = [(x if c else y)
               for x, y, c in zip(xarr, yarr, cond)]
    #print result
    '''
    上面式子可以用一个函数代替:np.where( , , ,)。第一个参数是一个判定,这个判定的结果是根据后面两个参数来输出的。其中,第二个
    是第一个参数的True结果输出,而第三个参数是第一个False结果输出。
    '''
    result = np.where(cond,xarr,yarr)
    #print result
    
    from numpy.random import randn
    arr = randn(4,4)
    #把大于0的值变成2,小于0的值变成-2
    result = np.where(arr > 0, 2, -2)
    #print result
    #只把大于0的值变成2,其他的不变
    result = np.where(arr > 0, 2, arr)
    #print result
    '''
    np.where(rond1 & rond2, 0,
               np.where(rond1, 1,
                          np.where(rond2, 2, 3)))
    '''
    ax = np.random.randn(5, 4)
    #print ax
    a = ax[0,:]
    #计算每一行的均值使用axis = 1  1代表行
    #print ax.mean(axis=1)
    #print a.mean()
    b = ax[:,0]
    #计算每一列的均值使用axis = 0  0代表列
    #print ax.mean(axis=0)
    #print b.mean()
    ay = np.array([[0,1,2],
                   [3,4,5],
                   [6,7,8]])
    #计算每一列前个数与后个数的和,返回的仍是一个数组。     0代表列
    #print ay.cumsum(0)
    #计算每一行前个数与后个数的积,返回的仍是一个数组。     1代表行
    #print ay.cumprod(1)
    
    #计算ax中正数的个数, 布尔值会被强制转为1(True)和 0(False)。
    #print ( ax > 0 ).sum()
    import numpy as np
    a = np.arange(10)
    np.save("some_array", a)
    b = np.load("some_array.npy")
    #print b
    #加载txt和逗号分隔文件(CSV)方式。保存用np.savetxt方式
    #ab = np.loadtxt("array_ex.txt", delimiter= ",")
    
    #线性代数
    
    #建立一个一维数组由3个1组成。
    np.ones(3)
    x = np.array([[1,2,3], [4,5,6]])
    y = np.array([[6, 23],[-1, 7],[8, 9]])
    #计算两个数组的乘积。dot()函数
    x.dot(y)
    np.dot(x, y)
    np.dot(x, np.ones(3))
    from numpy.random import randn
    from numpy.linalg import inv, qr
    X = randn(5, 5)
    mat = X.T.dot(X)
    #计算数组的逆
    inv(mat)
    mat.dot(inv(mat))
    #计算QR分解
    q, r = qr(mat)
    #print r

    最后,以随机漫步的例子,运用numpy加深对其的理解。

    import random
    import numpy as np
    from numpy.random import randint
    b = np.random.randint(0,2)  # numpy中的randint不能取右端的那个值,也就是例子中(0,2)不能取到2
    a = random.randint(0,2)     # random中的randint是可以取到右端的值,(0,2)也就是在0,1,2中随机取值
    
    #随机漫步(普通版)
    position = 0
    walk = [position]
    steps = 10
    for i in xrange(steps):
        # 这句话实际上是一种逻辑判断句,random.randint是逻辑判断条件,与0比较。标准语句:a if condition else b .判断条件大于0,选择a,反之,选择b。
        step = 1 if random.randint(0,1) else -1
        position += step
        walk.append(position)
    #print walk
    
    #随机漫步(提升版)
    nsteps = 10
    draws = np.random.randint(0,2, size= nsteps)
    steps = np.where(draws > 0, 1, -1)
    # 将结果变成一种数组
    walk = steps.cumsum()
    #print walk
    #只有数组能这样使用
    walk.min()
    walk.max()
    #判断从0到2步,所需要多久,多少次。
    (np.abs(walk) >= 2).argmax()
    
    #多个随机漫步
    nwalks = 100
    nsteps = 100
    draws = np.random.randint(0,2, size=(nwalks, nsteps))
    steps = np.where(draws > 0, 1, -1)
    #计算每一行的累计和。“1”代表行,“0”代表列
    walks = steps.cumsum(1)
    walks.min()
    walks.max()
    #计算大于20或-20的布尔值(True,False)
    np.abs(walks) >= 20
    #计算每一行中有大于20或-20的布尔值
    hits20 = (np.abs(walks) >= 20).any(1)
    #计算达到20或-20的行,一共有多少个
    hits20.sum()
    #计算达到20或-20的行的漫步累计次数
    walks[hits20]
    #计算达到20或-20的每一行第一次漫步到20或-20的步数
    crossing_times = (np.abs(walks[hits20])>= 20).argmax(1)
    #计算达到20或-20的每一行第一次漫步到20或-20的步数的均值
    print crossing_times.mean()
  • 相关阅读:
    C#文件读写常用类介绍
    C#实现注销、重启和关机代码
    Mybatis学习---基础知识考核
    Linux操作系统各版本ISO镜像下载
    Java学习---JDK的安装和配置
    Java学习---基础知识学习
    Java学习---常见的模式
    Java实例---黑白五子棋[单机版]
    Java实例---简单的超市管理系统
    Java实例---简单的个人管理系统
  • 原文地址:https://www.cnblogs.com/llhy1178/p/6755106.html
Copyright © 2020-2023  润新知