数据分析---科学计算工具numpy(上)

    xiaoxiao2022-07-07  151

    文章目录

    科学计算工具numpy(上)一、什么是numpy?二、numpy基础数据结构1.numpy数组---ndarray的基本操作(属性)2.创建numpy数组---ndarray(1)列表,元组,数组,生成器等做np下的array()函数的参数创建数组(2)用np下的linspace()函数(3)用np下的zeros()、zeros_like()、ones()、ones_like() 函数(4)用np下的eye()函数(5)np下的reshape()函数 三、numpy通用函数与方法1.数组的形状:T 、reshape()、resize()(1)T 、reshape()、resize()(2)reshape()与resize() 的区别 2.ndarray的复制3.改变numpy的元素类型(1)在生成np时,可以通过设置dtype属性来设置元素的类型(2)改变已经生成的numpy元素类型 3.ndarray堆叠3.ndarray的拆分3.ndarray的简单运算 小结

    科学计算工具numpy(上)

    一、什么是numpy?

    Numpy是python开源的科学计算工具包,它含有以下功能:

    强大的N维数组对象:ndarray对数组结构进行运算(不用遍历循环)随机数、线性代数、傅里叶变换等功能

    二、numpy基础数据结构

    1.numpy数组—ndarray的基本操作(属性)

    numpy数组是一个多维数组对象,称为ndarray,其由两部分构成:

    实际的数据描述这些数据的元数据

    eg:

    import numpy as np lst =[[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]] ar = np.array(lst) print(lst) print(ar, type(ar)) # ar是n维数组类型 print(ar.ndim) # ndim返回numpy的轴数 print(ar.shape) # shape返回numpy的纬度,轴数与列数,且是一个元组,(3,4) print(ar.size) # 返回元素个数 print(ar.dtype) # ndarray中元素的类型 print(ar.itemsize) # ndarray中一个元素所占的字节数 print(ar.data) # ndarray对象ar的物理地址 # 结果: [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]] [[1 2 3 4] [2 3 4 5] [3 4 5 6]] <class 'numpy.ndarray'> 2 (3, 4) 12 int32 4 <memory at 0x000001FFFB43CA68>
    2.创建numpy数组—ndarray
    (1)列表,元组,数组,生成器等做np下的array()函数的参数创建数组

    eg:

    # 创建数组,array()函数的括号中可以是列表,元组,数组,生成器等 ar1 = np.array(range(10)) # range是一个生成器 ar2 = np.arange(10) # 等价于上一行代码, arange和range的用法一模一样,只是这是调用的np的方法 print(ar1) print(ar2) # 如果元素类型不同,会自动将类型转为大的 ar3 = np.array([[1, 2, 3, 4], ['a', 'b', 'c', 'd']]) print(ar3) # 如果每个轴中的元素不等,则无论之前输入的是多少维,都会自动的变为一维数组 ar4 = np.array([[1, 2, 3, 4, 5], ['a', 'b', 'c', 'd']]) print(ar4, ar4.ndim) # 结果: [0 1 2 3 4 5 6 7 8 9] [0 1 2 3 4 5 6 7 8 9] [['1' '2' '3' '4'] ['a' 'b' 'c' 'd']] [list([1, 2, 3, 4, 5]) list(['a', 'b', 'c', 'd'])] 1
    (2)用np下的linspace()函数
    print(np.linspace(10, 20, num=6)) # []左闭右闭,num是表示显示几个数,如果是n等分,则num = n + 1 print(np.linspace(10, 20, num=6, endpoint=False)) # endpoint是否包含最后一个点 print(np.linspace(10, 20, num=6, retstep=True)) # retstep为True会返回一个二元元组,第二个参数是步长 # 结果: [10. 12. 14. 16. 18. 20.] [10. 11.66666667 13.33333333 15. 16.66666667 18.33333333] (array([10., 12., 14., 16., 18., 20.]), 2.0)
    (3)用np下的zeros()、zeros_like()、ones()、ones_like() 函数
    # zeros() zeros_like() 元素全是0 ones() ones_like() 元素全是1 print(np.zeros(10)) print(np.zeros((3, 5))) # 注意:这里参数是元组 print(np.zeros((3, 5), dtype=np.int)) ar1 = np.array([list(range(10)), list(range(10, 20))]) print(np.zeros_like(ar1)) ar2 = np.array(['a', 'b']) print(np.zeros_like(ar2)) # ones和zeros的用法一模一样 ar2 = np.array(['a', 'b']) print(np.ones_like(ar2)) # 结果: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] [[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]] [[0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0]] ['' ''] ['1' '1']
    (4)用np下的eye()函数
    # 用eye()方法,默认生成的是对角线为1的n×n矩阵 print(np.eye(5)) # 结果: [[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 0. 1.]]
    (5)np下的reshape()函数
    # 以后常用的生成ndarray的方法 print(np.random.rand(10).reshape(2, 5)) # 结果: [[0.39366876 0.16007069 0.9278696 0.06349453 0.13076 ] [0.9044376 0.70655228 0.34562442 0.34571877 0.60094136]] # 当然,一个已经存在了的np,也可以用reshape来改变形状 ar = np.arange(10) b = ar.reshape(2, 5) print(b) # 结果 [[0 1 2 3 4] [5 6 7 8 9]]

    三、numpy通用函数与方法

    1.数组的形状:T 、reshape()、resize()
    (1)T 、reshape()、resize()

    eg:T

    ar = np.array([list(range(5)), list(range(5,10))]) print(ar.T) # 注意:这里是ar.T 不是ar.T() #结果: [[0 5] [1 6] [2 7] [3 8] [4 9]]

    eg:reshape()

    ar = np.array([list(range(5)), list(range(5,10))]) print(np.reshape(ar, (5, 2))) # 用np下的reshape()函数 print(ar.reshape(5, 2)) # 用ndarray下的reshape()方法 #结果: [[0 1] [2 3] [4 5] [6 7] [8 9]] [[0 1] [2 3] [4 5] [6 7] [8 9]] [[0 1 2 3 4] [5 6 7 8 9]]

    eg:resize()

    print(np.resize(ar, (5, 2))) # 用np下的resize()函数 print(ar.resize(5, 2)) # 用array下的resize()方法,发现是不行的,只能用np下的方法 #结果: [[0 1] [2 3] [4 5] [6 7] [8 9]] None
    (2)reshape()与resize() 的区别

    注意:reshape()与resize()的不同之处在于,对于reshape()之前与之后的元素个数必须相同,而resize()不足的随机补充,过长就截断 eg:

    import numpy as np ar = np.arange(4) b = np.resize(ar, (3, 4)) print(b) # 结果: [[0 1 2 3] [0 1 2 3] [0 1 2 3]]
    2.ndarray的复制

    eg:

    import numpy as np ar = np.array([list(range(5)), list(range(5,10))]) ar2 = ar.copy() # 属于深复制 print(ar2) #结果: [[0 1 2 3 4] [5 6 7 8 9]]
    3.改变numpy的元素类型
    (1)在生成np时,可以通过设置dtype属性来设置元素的类型
    eg: ar = np.array([1, 2, 3.0], dtype=int) print(ar) # 结果 [1 2 3]
    (2)改变已经生成的numpy元素类型

    注意:numpy中的数据类型转换,不能直接改原数据的dtype!只能用函数astype()。 eg:dtype与astype()

    ar = np.arange(3) print(ar, ar.shape) b = ar.astype('float32') print(b, b.shape) ar.dtype = 'float32' print(ar, ar.shape) # 结果: [0 1 2] (3,) [0. 1. 2.] (3,) [0.e+00 1.e-45 3.e-45] (3,)

    结论:resize()只能用np.resize()


    3.ndarray堆叠

    注意:hstack()是横向堆叠, vstack是竖直堆叠 eg:

    ar = np.array([[1], [2], [3]]) # 3*1 ar2 = np.array([['a'], ['b'], ['c']]) # 3*1 print(np.hstack((ar, ar2))) # 横向连接 3*2 print(np.vstack((ar, ar2))) # 竖向叠加 6*1 # 结果: [['1' 'a'] ['2' 'b'] ['3' 'c']] [['1'] ['2'] ['3'] ['a'] ['b'] ['c']]
    3.ndarray的拆分

    注意:hsplit()是横向拆分, vsplit()是竖直拆分 eg:

    ar = np.arange(16).reshape(4, 4) print(ar) print(np.hsplit(ar, 2)[0]) # 数值2代表的是要分成几列,0是代表取第1列数据 # 结果: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[ 0 1] [ 4 5] [ 8 9] [12 13]]
    3.ndarray的简单运算

    eg:

    ar = np.arange(8).reshape(2, 4) print(ar + 10) # 加法 print(ar - 1) # 减法 print(ar * 10) # 乘法 print(ar / 2) # 除法 print(ar.mean()) # 求平均数 print(ar.max()) # 求最大值 print(ar.min()) # 求最小值 print(ar.std()) # 求标准差 print(ar.var()) # 求方差 print(np.sort(ar)) # 排序 print(ar.sum()) # 求和 print(np.sum(ar, axis=1)) # 求方和,axis=1是按照行求和,axis=0是按照列求和

    小结

    narray的转置是ar.T,不是ar.T()用np的函数的有:np.resize()、np.astype()、按行列求和np.sum(ar, axis=1)、np.sort()

    数据分析—科学计算工具numpy(下)

    最新回复(0)