数据分析 —— numpy

  1. 什么是numpy
    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。

二. Numpy的使用

  1. 用Numpy创建数组

     import numpy as np
     
     
     # 1). 创建数组: a, b, c创建的数组相同, 任选一种;
     a = np.array([1, 2, 3, 4, 5])
     b = np.array(range(1, 6))
     c = np.arange(1, 6)
     
     print(a, b, c)
     #
     # # 2). 查看numpy创建的数组类型
     print(type(a))
     print(type(b))
     print(type(c))
     
     #
     # 3). 查看数组存储的数据类型, 常见的数据类型还有哪些?
     print(a.dtype)   # 为什么是int64? 因为硬件架构是64位;
     
     
     # 4). 制定创建的数组的数据类型
     d = np.array([1.9, 0, 1.3, 0], dtype=float)
     print(d, d.dtype)
     #
     # 5). 修改数组的数据类型
     e = d.astype('int64')   # 里面可以是数据类型, 也可以是数据代码;int64---i1
     print(e, e.dtype)
     
     # 6). 修改浮点数的小数点位数
     # 随机创建一个三行四列的数组;
     f = np.random.random((3, 4))
     print(f)
     
     # 修改浮点书的小数位数为3位
     g = np.round(f, 3)
     print(g)
    

运行结果为:
在这里插入图片描述

  1. 矩阵的转置

     import numpy as np
     
     data = np.random.random((3, 4))
     
     # 转换数据结构 # 2,6
     data = data.reshape((2, 6))
     
     print(data)
     print("转置: ", data.T)
     print("转置: ", data.transpose())
     print("转置: ", data.swapaxes(1, 0))
    

运行结果为:
在这里插入图片描述

  1. Numpy的切片和索引

     import numpy as np
     a = np.arange(12).reshape((3, 4))
     
     print(a)
     
     # *****************取单行或者单列*********************
     # 取第2行;
     print(a[1])
     # 取第3列;
     print(a[:, 2])
     # 获取第2行3列的数据
     print(a[1, 2])
     
     
     
     # *****************取连续行或者列*********************
     # 取第2行和第3行;
     print(a[1:3])
     
     # 取第3列和第4列
     print(a[:, 2:4])
     
     # 行: 1和2   列: 2
     print(a[0:2, 1:2])
     
     
     
     # *****************取不连续的行或者列*********************
     # 行: 1和3   列: all 获取第一行和第三行的所有元素
     print(a[[0, 2], :])
     # 行: all   列: 1, 4
     print(a[:, [0, 3]])
     # 行: 1 , 3   列: 1 4  获取第一行第一列的元素, 和第三行第4列的元素
     print("*"*10)
     print(a[[0, 2], [0, 3]])
    

在这里插入图片描述

  1. Numpy中数值的修改

     import numpy as np
     
     # 执行行和指定列的修改
     t = np.arange(24).reshape((4, 6))
     print(t)
     #行: all, 列: 3,4
     t[:, 2:4] = 0
     print(t)
     
     # 布尔索引
     print(t < 10)
     #
     t[t < 10] = 100
     print(t)
     
     t[t > 20] = 200
     print(t)
     
     
     # numpy的三元运算符 t<100?0:10
     t1  = np.where(t < 100, 0, 10)
     print(t)
     print(t1)
    

运行结果为:
在这里插入图片描述

  1. 获取矩阵的四角元素

     import  numpy as np
     
     def get_edge(data):
         row  ,column = data.shape
         rows = np.array([[0,0],[row-1,row-1]])
         cols = np.array([[0,column-1] , [0,column-1]])
         return data[rows,cols]
     
     if __name__ == '__main__':
         x= np.arange(30).reshape((5,6))
         print("data" , x)
         print("result:" , get_edge(x))
    

运行结果为:
在这里插入图片描述

  1. 花式索引

     """
     花式索引
         花式索引指的是利用整数数组进行索引。
     
         花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;
         如果目标是二维数组,那么就是对应下标的行。
     
         花式索引跟切片不一样,它总是将数据复制到新数组中。
     """
     
     import numpy as np
     # 传入顺序索引数组
     x = np.arange(32).reshape((8, 4))
     print(x)
     print(x[[4, 2, 1, 7]])
     
     # 传入倒序索引数组
     x=np.arange(32).reshape((8,4))
     print (x[[-4,-2,-1,-7]])
     
     # 传入多个索引数组(要使用np.ix_)
     """
     原理:np.ix_函数就是输入两个数组,产生笛卡尔积的映射关系
     将数组[1,5,7,2]和数组[0,3,1,2]产生笛卡尔积,就是得到
     (1,0),(1,3),(1,1),(1,2);(5,0),(5,3),(5,1),(5,2);(7,0),(7,3),(7,1),(7,2);(2,0),(2,3),(2,1),(2,2);
     """
     x=np.arange(32).reshape((8,4))
     print(x)
     print (x[np.ix_([1,5,7,2],[0,3,1,2])])
    

运行结果为:
在这里插入图片描述
在这里插入图片描述
7. 数组形状改变

"""
    reshape	不改变数据的条件下修改形状
         numpy.reshape(arr, newshape, order='C')
         order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。
    flat	数组元素迭代器

    flatten	返回一份数组拷贝,对拷贝所做的修改不会影响原始数组
    ravel	返回展开数组
"""

import numpy as np

print("****************************************flat********************************")
a = np.arange(9).reshape(3, 3)
print('原始数组:')
for row in a:
    print(row)

# 对数组中每个元素都进行处理,可以使用flat属性,该属性是一个数组元素迭代器:
print('迭代后的数组:')
for element in a.flat:
    print(element)

#
print("*********************************flatten**************************************")
a = np.arange(8).reshape(2, 4)

print('原数组:')
print(a)
print('\n')
# 默认按行

print('展开的数组:')
print(a.flatten())
print('\n')

print('以 F 风格顺序展开的数组:')
print(a.flatten(order='F'))


print("*********************************ravel*************************************")
a = np.arange(8).reshape(2, 4)

print('原数组:')
print(a)
print('\n')

print('调用 ravel 函数之后:')
print(a.ravel())
print('\n')

print('以 F 风格顺序调用 ravel 函数之后:')
print(a.ravel(order='F'))

运行结果为:
在这里插入图片描述

在这里插入图片描述

  1. 数组的拼接

     import numpy as np
     
     print("concatenste")
     a = np.array([[1, 2], [3, 4]])
     print("第一个数组:")
     print(a)
     print('\n')
     
     b = np.array([[5, 6], [7, 8]])
     print("第二个数组:")
     print(b)
     print('\n')
     
     print("沿0轴连接两个数组")
     print(np.concatenate((a, b)))
     print('\n')
     print("沿1轴连接两个数组")
     print(np.concatenate((a, b), axis=1))
     
     print("stack")
     a = np.array([[1, 2], [3, 4]])
     print("第一个数组")
     print(a)
     print('\n')
     b = np.array([[5, 6], [7, 8]])
     print("第二个数组")
     print(b)
     print('\n')
     
     print("沿0堆叠两个数组")
     print(np.stack((a, b), axis=0))
     print('\n')
     print("沿1轴堆叠两个数组")
     print(np.stack((a, b), axis=1))
     
     print("hstack")
     a = np.array([[1, 2], [3, 4]])
     print("第一个数组")
     print(a)
     print('\n')
     b = np.array([[5, 6], [7, 8]])
     print("第二个数组")
     print(b)
     print('\n')
     
     print("水平堆积")
     c = np.hstack((a, b))
     print(c)
     print('\n')
     
     print("竖直堆积")
     d = np.stack((a, b))
     print(d)
     print('\n')
    

运行结果为:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 数组元素的添加与删除

      import  numpy as np
     
     print("append")
     a = np.array([[1,2,3] ,[4,5,6]])
     print("第一个数组")
     print(a)
     print('\n')
     print("向数组中添加元素")
     print(np.append(a,[7,8,9]))
     print('\n')
     
     print("沿0 轴添加元素")
     print(np.append(a,[[7,8,9]] ,axis=0))
     print('\n')
     
     print("沿1轴添加元素")
     print(np.append(a,[[5,5,5],[7,8,9]] ,axis=1))
     
     print("insert")
     a = np.array([[1,2],[3,4],[5,6]])
     print("第一个数组")
     print(a)
     print('\n')
     
     print("未传递AXIS 参数,在插入之前数组会被展开")
     print(np.insert(a ,3,[11,12]))
     print('\n')
     
     print("传递了axis 参数,会传播值数组来配入数组")
     print("沿0轴传播")
     print(np.insert(a,1,[11],axis=0))
     print("沿1轴传播")
     print(np.insert(a,1,11,axis = 1))
     
     
     print("delete")
     a = np.arange(12).reshape(3,4)
     print("第一个数组")
     print(a)
     print('\n')
     
     print("未传递axis参数,在插入之前输出的数组会被展开")
    

运行结果为:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值