numpy基础使用

174 阅读6分钟
  • # 数据分析的基础步骤:数据收集,数据处理,数据分析,数据展现




  • # numpy的安装 pip install numpy




  • # pandas的安装 pip install pandas




  • # Matplotlib的安装:pip install matplotlib




  • #




  • # jupeter notebook是ipython的升级版 一个Web应用程序 界面更友好 功能也更强大。




  • # 可创建和共享代码 数据清洗和转换 数值模拟 统计建模 机器学习等等




  • # jupyter notebook的安装 pip install jupyter




  • # 启动jupyter notebook








  • # 数据加载np.genfromtxt




  • import
    numpy
    as
    np



  • filename =
    "./presidential_polls.csv"




  • data_arr = np.genfromtxt(filename,
    #需要打开的文件名




  • delimiter =
    ","
    ,
    #文件的分隔符




  • dtype=str,
    #数据按字符串格式存储,不进行bytes编码




  • usecols = (
    3
    ,
    17
    ,
    18
    ,
    19
    ),
    #表示读取文件里列索引位置




  • )



  • print(data_arr)







  • # 数据存储np.loadtxt




  • filename =
    "./presidential_polls.csv"




  • data_arr = np.loadtxt(filename,
    #需要打开的文件名




  • delimiter =
    ","
    ,
    #文件的分隔符




  • #skiprows = 1, #可以选择调过开头指定的行




  • dtype=str,
    #数据是按编码后的字符串格式存储




  • usecols = (
    3
    ,
    17
    ,
    18
    ,
    19
    ),
    #表示读取文件里的列的索引位置)



1、numpy数组的创建



  • # 随机抽样生成数组范围[0, 1)




  • arr1 = np.random.rand(
    2
    ,
    3
    ,
    4
    )



  • print(arr1)



  • print(type(arr1))




  • [[[
    0.57574486
    0.54646636
    0.8826699
    0.18578644
    ]



  • [
    0.98587593
    0.79860098
    0.33510005
    0.63357311
    ]



  • [
    0.57229583
    0.78985357
    0.94551367
    0.50121632
    ]]







  • [[
    0.54692874
    0.93198596
    0.27521756
    0.77860668
    ]



  • [
    0.72724299
    0.29829541
    0.96995412
    0.01535601
    ]



  • [
    0.85714544
    0.47116552
    0.77156323
    0.51256554
    ]]]



  • <class 'numpy.ndarray'>




  • # 随机从标准正太分布中返回一个或多个样本值




  • arr2 = np.random.randn(
    2
    ,
    3
    ,
    4
    )



  • print(arr2)



  • print(type(arr2))




  • [[[
    -0.23396039
    -0.23336667
    -0.30112823
    -1.23415798
    ]



  • [
    0.91558245
    0.12414881
    0.15081818
    -1.53843735
    ]



  • [
    -0.21620594
    0.7359921
    0.50092933
    0.75558742
    ]]







  • [[
    0.32530112
    0.73525383
    0.37219234
    0.21443457
    ]



  • [
    0.01752722
    2.44692182
    -0.69826485
    -0.51774681
    ]



  • [
    0.46323329
    0.50842233
    -0.81426621
    -1.12823969
    ]]]



  • <class 'numpy.ndarray'>




  • # 随机从指定范围中创建对位整型数据




  • arr3 = np.random.randint(
    -1
    ,
    5
    , (
    3
    ,
    4
    ))



  • # arr3 = np.random.randint(-1, 5, size=(3, 4))




  • print(arr3)



  • print(type(arr3))




  • [[
    2
    0
    2
    4
    ]



  • [
    -1
    0
    -1
    4
    ]



  • [
    2
    3
    2
    3
    ]]



  • <class 'numpy.ndarray'>





  • # 生成指定维度大小(3行4列)的随机多维浮点型数据




  • arr4 = np.random.uniform(
    -1
    ,
    5
    , (
    3
    ,
    4
    ))



  • print(arr4)



  • print(type(arr4))



  • # ndarray的属性




  • # 维度个数, 一维 二维 三维




  • print(arr4.ndim)



  • # 维度大小(3, 4)




  • print(arr4.shape)



  • # 数组里的数据类型 float64




  • print(arr4.dtype)




  • [[
    3.55892155
    2.19149605
    4.84316689
    4.74206393
    ]



  • [
    2.11843647
    0.26380823
    0.78019315
    3.38043045
    ]



  • [
    3.39062911
    4.27111334
    0.63242528
    0.42685677
    ]]



  • <class 'numpy.ndarray'>



  • 2



  • (3, 4)



  • float64




  • # 自定义数组创建




  • lis = range(
    5
    )



  • arr5 = np.array(lis)



  • print(arr5)



  • print(np.array([range(
    5
    ), range(
    5
    )]))



  • print(np.array([(
    1
    ,
    2
    ), (
    3
    ,
    4
    )]))



  • print(np.array([[
    1
    ,
    2
    ], [
    3
    ,
    4
    ]]))




  • [
    0
    1
    2
    3
    4
    ]



  • [[
    0
    1
    2
    3
    4
    ]



  • [
    0
    1
    2
    3
    4
    ]]



  • [[
    1
    2
    ]



  • [
    3
    4
    ]]



  • [[
    1
    2
    ]



  • [
    3
    4
    ]]




  • # 指定大小的全0数组 第一个参数是元组 默认数据类型为float64




  • zeros_arr = np.zeros((
    3
    ,
    4
    ), dtype=
    'int32'
    )



  • print(zeros_arr)



  • # 运行结果:int32




  • print(zeros_arr.dtype)




  • [[
    0
    0
    0
    0
    ]



  • [
    0
    0
    0
    0
    ]



  • [
    0
    0
    0
    0
    ]]



  • int32




  • # 指定大小的全1数组 第一个参数是元组 默认数据类型为float64




  • ones_arr = np.ones((
    2
    ,
    3
    ))



  • print(ones_arr)



  • print(ones_arr.dtype)




  • [[
    1.
    1.
    1.
    ]



  • [
    1.
    1.
    1.
    ]]



  • float64




  • # 指定大小的全1数组 第一个参数是元组 默认数据类型为float64




  • empty_arr = np.empty((
    3
    ,
    3
    ), int)
    # 指定数据类型为int




  • print(empty_arr)



  • # 运行结果:int32




  • print(empty_arr.dtype)




  • [[0 0 0]




  • [0 0 0]




  • [0 0 0]
    ]



  • int32





  • arr6 = np.arange(
    6
    )



  • arr7 = np.arange(
    6
    ).reshape(
    2
    ,
    3
    )



  • # 1x6个元素的一维数组




  • print(arr6)



  • # 2x3个元素的 二维数组




  • print(arr7)




  • [
    0
    1
    2
    3
    4
    5
    ]



  • [[
    0
    1
    2
    ]



  • [
    3
    4
    5
    ]]


2、



  • import
    numpy
    as
    np



  • # 一维数组的索引与切片 和列表的操作类似




  • arr1 = np.arange(
    10
    )



  • print(arr1[
    2
    :
    5
    ])
    # <class 'numpy.ndarray'>




  • print(type(arr1[
    2
    :
    5
    ]))
    # [2 3 4]




  • print(arr1[
    1
    ])



  • print(type(arr1[
    1
    ]))
    # <class 'numpy.int32'>





  • [
    2
    3
    4
    ]



  • <class 'numpy.ndarray'>



  • 1



  • <class 'numpy.int32'>




  • # 多维数组的索引与切片




  • arr2 = np.arange(
    12
    ).reshape(
    3
    ,
    4
    )



  • print(arr2)



  • print(arr2[
    2
    ][
    3
    ])
    # 索引为(2, 3)的数据




  • print(arr2[
    1
    ])
    # 索引为1的行 [4 5 6 7]




  • print(arr2[
    0
    :
    2
    ,
    2
    :])
    # 索引为0 1的行和 索引为2-的交叉部分




  • print(arr2[:,
    1
    :
    3
    ])
    # 索引为1 2的列





  • [[
    0
    1
    2
    3
    ]



  • [
    4
    5
    6
    7
    ]



  • [
    8
    9
    10
    11
    ]]



  • 11




  • [
    4
    5
    6
    7
    ]



  • [[
    2
    3
    ]



  • [
    6
    7
    ]]



  • [[
    1
    2
    ]



  • [
    5
    6
    ]



  • [
    9
    10
    ]]




  • # 条件索引 找出 data_arr 中 2005年后的数据




  • data_arr = np.random.rand(
    3
    ,
    3
    )



  • print(data_arr)



  • year_arr = np.array([[
    2000
    ,
    2001
    ,
    2000
    ], [
    2005
    ,
    2002
    ,
    2009
    ], [
    2001
    ,
    2003
    ,
    2010
    ]])



  • is_year_after_2005 = year_arr >=
    2005




  • # 返回的是一个3x3的数组 值时bool型 >=2005的索引位置是True 其他的是False




  • print(is_year_after_2005, is_year_after_2005.dtype)



  • # 提取is_year_after_2005是True的索引在data_arr中对应的值




  • print(data_arr[is_year_after_2005])



  • # 找出 data_arr中2005年前且年份能整除二的年份和数据




  • filtered_arr1 = year_arr[(year_arr <=
    2005
    ) | (year_arr %
    2
    ==
    0
    )]



  • print(filtered_arr1)



  • print(data_arr[(year_arr <=
    2005
    ) | (year_arr %
    2
    ==
    0
    )])



  • # print(data_arr[filtered_arr1])




  • # 找出 data_arr中2005年前或年份能整除二的年份和数据




  • filtered_arr2 = year_arr[(year_arr <=
    2005
    ) & (year_arr %
    2
    ==
    0
    )]



  • print(filtered_arr2)



  • print(data_arr[(year_arr <=
    2005
    ) & (year_arr %
    2
    ==
    0
    )])




  • [[
    0.73953195
    0.61348584
    0.79242628
    ]



  • [
    0.52146043
    0.36660039
    0.20184571
    ]



  • [
    0.7044723
    0.92653372
    0.07748207
    ]]



  • [[
    False
    False
    False
    ]



  • [
    True
    False
    True
    ]



  • [
    False
    False
    True
    ]] bool



  • [
    0.52146043
    0.20184571
    0.07748207
    ]



  • [
    2000
    2001
    2000
    2005
    2002
    2001
    2003
    2010
    ]



  • [
    0.73953195
    0.61348584
    0.79242628
    0.52146043
    0.36660039
    0.7044723




  • 0.92653372
    0.07748207
    ]



  • [
    2000
    2000
    2002
    ]



  • [
    0.73953195
    0.79242628
    0.36660039
    ]


3、



  • import
    numpy
    as
    np



  • # 元素计算函数




  • arr = np.random.randn(
    2
    ,
    3
    )



  • print(arr)



  • print(np.ceil(arr))
    # arr的所有元素向上区镇




  • print(np.floor(arr))
    # arr的所有元素向下取整




  • print(np.rint(arr))
    # arr的所有元素四舍五入




  • print(np.isnan(arr))
    # 判断元素是否为 NaN(Not a Number)




  • print(np.multiply(arr, arr))
    # arr对应元素相乘




  • print(np.divide(arr, arr))
    # arr对应元素相除




  • print(np.where(arr >
    0
    ,
    1
    ,
    -1
    ))
    # arr中元素大于0为1小于0为-1





  • [[
    -2.06506175
    -0.50280408
    1.45255375
    ]



  • [
    1.33348679
    -0.7492421
    0.90596497
    ]]



  • [[
    -2.
    -0.
    2.
    ]



  • [
    2.
    -0.
    1.
    ]]



  • [[
    -3.
    -1.
    1.
    ]



  • [
    1.
    -1.
    0.
    ]]



  • [[
    -2.
    -1.
    1.
    ]



  • [
    1.
    -1.
    1.
    ]]



  • [[
    False
    False
    False
    ]



  • [
    False
    False
    False
    ]]



  • [[
    4.26448002
    0.25281195
    2.10991241
    ]



  • [
    1.77818701
    0.56136372
    0.82077252
    ]]



  • [[
    1.
    1.
    1.
    ]



  • [
    1.
    1.
    1.
    ]]



  • [[
    -1
    -1
    1
    ]



  • [
    1
    -1
    1
    ]]




  • # 元素统计函数




  • arr = np.arange(
    1
    ,
    13
    ).reshape(
    3
    ,
    4
    )



  • print
    (arr)



  • print
    (np.sum(arr))
    # 所有元素的和




  • print
    (np.sum(arr, axis=
    0
    ))
    # 数组的按列统计和




  • print
    (np.sum(arr, axis=
    1
    ))
    # 数组的按行统计和




  • print
    (np.cumsum(arr))
    # 返回一个一维数组 每个元素都是之前所有元素的 累加和




  • print
    (np.cumprod(arr))
    # 返回一个一维数组 数组的每一个元素都是之前所有元素的累加积





  • [[
    1
    2
    3
    4
    ]



  • [
    5
    6
    7
    8
    ]



  • [
    9
    10
    11
    12
    ]]



  • 78




  • [
    15
    18
    21
    24
    ]



  • [
    10
    26
    42
    ]



  • [
    1
    3
    6
    10
    15
    21
    28
    36
    45
    55
    66
    78
    ]



  • [
    1
    2
    6
    24
    120
    720
    5040




  • 40320
    362880
    3628800
    39916800
    479001600
    ]




  • arr = np.random.randint(
    0
    ,
    10
    , (
    3
    ,
    4
    ))



  • print(arr)



  • # 所有元素的平均值与和




  • print(np.mean(arr))



  • print(np.sum(arr))



  • print(np.max(arr))
    # 求数组的最大值




  • print(np.min(arr))
    # 求数组的最小值




  • print(np.var(arr))
    # 求方差




  • print(np.std(arr))
    # 求标准差:方差的平方根





  • [[
    3
    6
    7
    2
    ]



  • [
    4
    4
    3
    2
    ]



  • [
    8
    5
    9
    4
    ]]



  • 4.75




  • 57




  • 9




  • 2




  • 4.854166666666667




  • 2.203217344400381





  • # 求最大值和最小值的索引下标 如果是多维数组 将多维数组合并成一维数组 再找出最大值索引下标




  • arr = np.random.randint(
    0
    ,
    10
    , (
    3
    ,
    4
    ))



  • print(arr)



  • print(np.argmax(arr))



  • print(np.argmin(arr))




  • [[
    5
    2
    1
    2
    ]



  • [
    0
    6
    1
    3
    ]



  • [
    5
    4
    1
    6
    ]]



  • 5




  • 4





  • # 元素判断函数




  • arr = np.random.randn(
    2
    ,
    3
    )



  • print(arr)



  • print(np.any(arr >
    0
    ))
    # 至少有一个元素满足指定条件 返回True




  • print(np.all(arr >
    0
    ))
    # 所有的元素满足指定条件 返回True








  • # 元素判断函数




  • arr = np.array([[
    1
    ,
    2
    ,
    1
    ], [
    2
    ,
    3
    ,
    4
    ]])



  • print(arr)



  • print(np.unique(arr))
    # 找到唯一值并返回排序结果 类似于Python的set集合






  • [[
    0.46215757
    0.64009362
    0.26844304
    ]



  • [
    -1.17199175
    0.62900237
    -0.41159536
    ]]



  • True




  • False




  • [[
    1
    2
    1
    ]



  • [
    2
    3
    4
    ]]



  • [
    1
    2
    3
    4
    ]


更多免费技术资料可关注:annalin1203