美文网首页
NumPy辟邪剑谱——入门篇

NumPy辟邪剑谱——入门篇

作者: 转身丶即天涯 | 来源:发表于2019-11-10 20:07 被阅读0次

    NumPy

    全称Numerical Python,是Python数值计算中最重要的基础包,大多数计算包都提供了基于NumPy的科学函数功能,将NumPy的数组对象作为数据交换的通用语。

    以下内容大多来自《利用python进行数据分析》一书,非常值得拥有的一本书,带你走进数据分析的世界。

    Numpy基本操作
    import numpy as np
    
    # Numpy ndarray: 多维数组对象
    
    # 1.创建ndarray
    # 1.1 生成随机数组
    # range_arr = np.random.randn(2, 3)
    
    # 1.2 arange()函数,模仿python的range函数,默认类型int64
    # range_arr2 = np.arange(20, dtype=np.float64)
    # print(range_arr2, range_arr2.dtype)
    
    # 1.2 用list创建ndarray
    test_arr1 = np.array([1, 2, 3, 4])
    test_arr2 = np.array([5, 6, 7, 8])
    test_arr3 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    test_arr4 = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
    
    # 1.3 如果想创建同构array,可以传入dtype参数,用来指定每个元素的数据类型
    # test_arr5 = np.array([1, 2, 3], dtype=np.int8)
    # print(test_arr5, test_arr5.dtype)
    
    # 1.4 用dict生成array
    # test_arr5 = np.array(list({'a':1, 'b':2}.values()))
    # print(test_arr5, type(test_arr5), test_arr5.size, test_arr5.dtype, test_arr5.ndim)
    
    # 1.5 创建长度为n的全0的array
    # n = 20
    # zero_array = np.zeros(n)
    # print(zero_array)
    
    # 1.6 one函数,创建给定形状和数据类型的值全为1的数组
    # one_array = np.ones(15, dtype=np.float64)
    # print(one_array)
    
    # 1.7 根据给定数组的形状,生成一个形状一个的全1数组
    # parent_arr = np.array([1,2,3,4,5])
    # ones_like_array = np.ones_like(parent_arr)
    # print(ones_like_array)
    
    # 1.8 和ones_like类似,还有一个ones_zero(),区别在于生成的是全0数组
    
    # 1.9 根据给定形状,生成一个没有初始化数值的空数组
    # Note:生成的数值是垃圾数值,原因在于生成的是一个未初始化的array
    # size = (4, 2)
    # empty_array = np.empty(size)
    # print(empty_array)
    
    # 1.10 empty_like()函数,类似ones_like
    
    # 1.11 根据给定的形状和数据类型生成指定数值的数组
    # Note:fill_value参数接受一个整数,所以生成所有元素都是这个整数值
    # full_array = np.full(shape=(4,), fill_value=6)
    # print(full_array)
    
    # 1.12 根据所给定的数组生成一个形状一样,但内容是指定数值的数组
    # parent_array = np.array([1,2,3,4,5])
    # full_like_array = np.full_like(parent_array, fill_value=7, dtype=np.int64)
    # print(full_like_array)      # output: [7, 7, 7, 7, 7]
    
    # 1.13 生成一个 N * N 特征矩阵,对角线上值为1,其余位置为0
    # feature_array = np.eye(N=10)
    # print(feature_array)
    #
    # feature_array2 = np.identity(n=10)
    # print(feature_array2)
    
    
    # 2.ndarray 加法
    # 2.1 和常数相加,array中每个元素都会和这个常数相加,结果仍是ndarray
    # res = test_arr + 1
    # print(res)
    #
    # res2 = test_arr2 + 1
    # print(res2)
    
    # 2.2 和常数相乘,array中每个元素都会和这个常数相乘,结果仍是ndarray
    # res = test_arr * 2
    # print(res)
    #
    # res2 = test_arr2 * 2
    # print(res2)
    
    # 2.3 和array相加,对应位置相加
    # res = test_arr1 + test_arr2
    # print(res)
    #
    # res2 = test_arr3 + test_arr4
    # print(res2)
    
    # 2.4 和array相乘,对应位置相乘
    # res = test_arr1 * test_arr2
    # print(res)
    #
    # res2 = test_arr3 * test_arr4
    # print(res2)
    
    # 3.查看ndarray的形状,shape属性返回的是一个tuple类型
    # shape = test_arr1.shape
    
    # 3.1 判断array的形状是不是符合预期,比如预期是一维数组,包含4个元素
    # if shape == (4,):
    #     print("Shape meet expectations.")
    
    # 3.2 判断array是不是一维ndarray
    # if test_arr1.ndim == 1:
    #     print(test_arr1.ndim)
    #
    # if test_arr3.ndim == 2:
    #     print("this is a two-dimensional array.")
    
    # 4.判断一个变量是否是ndarray类型
    # if type(test_arr1) is np.ndarray:
    #     print("test_arr1 is ndarray.")
    #
    # if isinstance(test_arr1, np.ndarray):
    #     print("test_arr1 is ndarray.")
    
    # 5.查看array中元素的数据类型
    # array.dtype存储了array的数据类型,改属性返回的str类型,可以用字符串判断
    # data_type = test_arr1.dtype
    # print(data_type, type(data_type))
    
    # 5.1 判断array中的元素是否是 numpy.int64 类型
    # print(type(test_arr1.dtype), type(np.int64))
    # if test_arr1.dtype == "int64":
    #     print("yes, all element is np.dtype.int64")
    
    # 6.转换数据类型
    # 6.1 将array中所有数值转为np.float64
    # Note: 需要注意,astype方法会生成一个新的array作为返回值,并不会修改原array。
    # transfered_arr = test_arr1.astype(np.float64)
    # print(test_arr1.dtype, transfered_arr.dtype, transfered_arr)
    
    # 6.2 np.int64 转 np.bool,可用来检查array中的值是否为0,并用True or False进行标记
    # Note:注意np.nan这个值,在转bool时,认为 np.nan 是True
    # test_arr5 = np.array([1, 0, np.nan, 2, 3, 4])
    # str_array = test_arr5.astype(np.bool)
    # print(str_array)
    
    # 6.3 np.int64 转为 字符串
    # str_array = test_arr1.tostring()
    # print(str_array)
    
    # 6.4 日期字符串 转 日期型
    # 6.4.1 astype传入参数"M8",表示格式化时间为 '%YYYY-%mm-%ddT%HH%MM%SS',如果给定格式不对,会进行格式补全
    # dt_array = np.array(['2018', '2019-01-01', '2019-08-20 00:00:00', '217', '12', '678324'])
    # dt = dt_array.astype("M8")
    # print(dt, dt.dtype)
    
    # 6.4.2 获取日期字符串中的年份
    # dt_array = np.array(['2018', '2019-01-01', '2019-08-20 00:00:00'])
    # dt_year = dt_array.astype("M8[Y]")
    # print(dt_year)
    
    # 6.4.3 以此类推,当然可以获取月,日,时,分,秒
    # Note:需要注意,是从年开始截取的,比如到'日',output: ['2018-01-01' '2019-01-01' '2019-08-20']
    # dt_month = dt_array.astype("M8[M]")
    # print(dt_month)
    #
    # dt_day = dt_array.astype("M8[D]")
    # print(dt_day)
    #
    # dt_hour = dt_array.astype("M8[h]")
    # print(dt_hour)
    #
    # dt_minute = dt_array.astype("M8[m]")
    # print(dt_minute)
    #
    # dt_second = dt_array.astype("M8[s]")
    # print(dt_second)
    
    # 6.4.4 将时间字符串 转 int64,转完了是时间戳
    # dt_year_int = dt_array.astype("M8[Y]").astype("int64")      # 从1970年到数据时间中的年份相差的年数
    # dt_month_int = dt_array.astype("M8[M]").astype("int64")     # 从1970年到数据时间中的月份相差的月数
    # dt_day_int = dt_array.astype("M8[D]").astype("int64")       # 以此类推
    # dt_hour_int = dt_array.astype("M8[h]").astype("int64")
    # dt_minute_int = dt_array.astype("M8[m]").astype("int64")
    # dt_second_int = dt_array.astype("M8[s]").astype("int64")
    #
    # print(dt_year_int)
    # print(dt_month_int)
    # print(dt_day_int)
    # print(dt_hour_int)
    # print(dt_minute_int)
    # print(dt_second_int)
    
    # 7.从array中取值
    # 7.1 使用索引
    # temp = test_arr1[2]
    # print(temp)
    
    # 7.2 使用切片,切片是左闭右开的区间,到倒数第二个数,但是不包含倒数第二个数
    # temp = test_arr1[:-2]
    # print(temp)
    # 测试:修改切片的值会改动原来的array么?和python的list类似,是可以修改的。
    # 而且,使用array 和 list 都可以进行替换。
    # test_arr1[:-2] = np.array([7, 8])
    # print(test_arr1)
    # test_arr1[:-2] = [7, 8]
    # print(test_arr1)
    
    # 7.3 如果是二维数组,可以用下面两种方式获取单个元素
    # 比如,获取第二行,第三列的元素
    # temp1 = test_arr3[1][2]
    # temp2 = test_arr3[1, 2]
    # print(temp1)
    # print(temp2)
    
    # 8.复制array
    # test_array5 = test_arr1.copy()
    # print(test_array5)
    # if test_array5 is not test_arr1:
    #     print("there not the same array")
    
    # 9.二维数组的切片
    # 以一个(3, 3)的二维数组为例
    # test_arr5 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    # 9.1 如果想获取第一列?
    # column1 = test_arr5[:, :1]
    # print(column1)
    
    # 9.2 如果想获取前两列呢?
    # column2 = test_arr5[:, :2]
    # print(column2)
    
    # 9.3 来个再难一点的,如果想获取前两行前两列呢?
    # square = test_arr5[:2, :2]
    # print(square)
    
    # 9.4 如果想获取第二行的前两列呢?
    # wrried = test_arr5[1:2, :2]
    # print(wrried)
    
    拿去练吧_

    相关文章

      网友评论

          本文标题:NumPy辟邪剑谱——入门篇

          本文链接:https://www.haomeiwen.com/subject/dugabctx.html