• numpy 基础学习


    1.基础运算

    对于np的很多计算,如max,mean,min,cumsum函数都有一个axis属性,当axis等于0时对于列计算,等于1时对于行计算

    for example, min函数

    import numpy as np
    
    A = np.array(range(14, 2, -1)).reshape(3, 4)
    print(A)
    print('------------')
    print(np.min(A, axis=0))
    print(np.min(A, axis=1))

    结果

     累加 cumsum()

    import numpy as np
    A = np.array(range(2,14)).reshape(3,4)
    print(A)
    print(np.cumsum(A))

    结果:

    累差:diff()

    import numpy as np
    A = np.array(range(2,14)).reshape(3,4)
    print(A)
    print(np.diff(A))

    结果:

    非零项 nonezero()

    import numpy as np
    A = np.array(range(2,14)).reshape(3,4)
    print(A)
    print(np.nonzero(A))

    他会输出由两个列表构成的元组,表示非零元素的位置。在这个例子中第一个列表是非零项的行数,第二个列表是非零项的列数

    排序 sort()

    import numpy as np
    A = np.array(range(14,2,-1)).reshape(3,4)
    print(A)
    print(np.sort(A))

    结果:

    转置 transpose() 或者 array的T属性

    import numpy as np
    A = np.array(range(14,2,-1)).reshape(3,4)
    print(A)
    print(np.transpose(A))
    print(A.T)

    clip():

    import numpy as np
    
    A = np.array(range(14, 2, -1)).reshape(3, 4)
    print(A)
    print(np.clip(A, 5, 9))

    clip函数把A中小于5的变成都赋值成5,把大于9的赋值成9

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

     2.索引

    import numpy as np
    
    A = np.arange(3,15).reshape(2,3,2)
    print(A)
    print(A[0][1])
    print(A[0,1])

    结果:

    这两种方式输出了同样结果

    第零行 第一到第二的值

    import numpy as np
    
    A = np.arange(3,15).reshape(2,3,2)
    
    print(A[0][1:2])
    print(A[0,1:2])

    结果:

     遍历

    行可以直接用for语句进行迭代,列可以迭代向量的转置,迭代所有元素可以用flat属性

    import numpy as np
    
    A = np.arange(3,15).reshape(2,3,2)
    
    #行迭代
    for i in A:
        print(i)
    
    #列迭代
    for i in A.T:
        print(i)
    
    #迭代所有元素
    for i in A.flat:
        print(i)

    合并:

    1.vstack和hstack

    import numpy as np
    
    A = np.array([1, 1, 1])
    B = np.array([2, 2, 2])
    
    V = np.vstack((A, B))  #vertical stack 上下合并
    H = np.hstack((A,B))  #horizontal stack 左右合并
    print(A.shape)
    print(V.shape)
    print(H.shape)

    2.concatenate 合并可以进行多个数列的合并

    import numpy as np
    
    A = np.array([1, 1, 1])[:,np.newaxis]
    B = np.array([2, 2, 2])[:,np.newaxis]
    
    C = np.concatenate((A,B),axis=1)
    print(C)

    需要注意的是, concatenate 要用在二维数据,所以如果上面代码中没有加上[:,np.newaxis]的话或出现下面错误

    这就是因为没有增加维度的向量是一维的,只有长而没有宽,无法进行vertical合并

    增加维度 np.newaxis 、reshape:

    import numpy as np
    
    A = np.array([1, 1, 1])
    A_T = A.T
    print(A.shape)
    print(A_T.shape)
    print(A.reshape(3,1).shape)
    print(A[:,np.newaxis].shape)

    可以看到numpy中的转置并没有把原来一行的数列转化成一列的数列

    我们可以通过reshape 或者 使用[:,np.newaxis]增加维度

    分割

    np.split() 

    import numpy as np
    
    A = np.array(range(12)).reshape(3, 4)
    print(np.split(A, 3, axis=0))
    print(np.split(A, 2, axis=1))

    其中axis默认为0,也就是按照行分

    np.array_spilit()

    与split唯一不同的是,array_split()可以不等分,如下:

    import numpy as np
    
    A = np.array(range(12)).reshape(3, 4)
    print(np.array_split(A, 3, axis=1))

    分成了1 1 2 的形式

     当然还可以用vsplit hsplit 这里就不赘述了

    深度复制

    numpy中的向量和python中的列表一样,一般的copy只是多了一个引用而已,所以需要copy()

    import numpy as np
    
    A = np.array(range(6))
    B = A
    C = A.copy()
    A[0] = -1
    print(A)
    print(B)
    print(C)

    可以看到当A发生变化之后B也随之改变,而通过deep copy得到的C没有改变

  • 相关阅读:
    各种排序算法java实现,好文,做个备份
    一个SQL语句
    StrutsLayout tag library 1.1发布
    “单击将本站加入收藏夹”的代码
    IE无法上网连接的解决办法
    字符问题!
    Time Tracker Starter Kit 简介
    谈恋爱是百年好合的事
    一个sql语句
    ASP.NET 中的自定义脚本回调
  • 原文地址:https://www.cnblogs.com/francischeng/p/9739144.html
Copyright © 2020-2023  润新知