当前位置: 移动技术网 > IT编程>脚本编程>Python > python基础笔记(一)_numpy的基础语法

python基础笔记(一)_numpy的基础语法

2020年07月18日  | 移动技术网IT编程  | 我要评论

科学计算工具包:Numpy

高级数值编程工具

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

基础数据结构

  • 数组的属性
    • ar.ndim:输出数组维度的个数(轴数),或者说‘秩’
    • ar.shape:输出数组的维度,对于n行m列的数组,shape为(n,m)
    • ar.size:输出数组中元素的个数
    • type(ar),ar.dtype:输出数组的类型以及其中元素的类型
    • ar.itemsize:输出数组中每个元素的字节大小,int32l类型字节为4,float64的字节为8
    • ar.data:含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
  • 创建数组
    • arange(),类似range(),在给定间隔内返回均匀间隔的值
    • linspace(): 返回在间隔[开始,停止]上计算的num个均匀间隔的样本
    • zeros()/zeros_like()/ones()/ones_like() :生成全0或1的数组
    • eye(),创建单位矩阵,主对角线数值为1,其余为0

通用函数

  • 数组形状:均生成新数组
    • 转置:ar.T:原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 所以一维数组转置后结果不变
    • reshape:改变目标数组的形状(需与原数组元素个数相同)
    • resize:返回具有指定形状的新数组,如有必要可重复元素
  • 数组的复制
    • ‘=’赋值运算,同列表相同,指向内存同一个值,同时改变  (浅拷贝)
    • copy 方法生成数组及其数据的完整拷贝,不同时改变  (深拷贝)
  • 数组类型转换
    • a.astype():转换数组类型
    • 数组类型用np.int32
  • 数组堆叠
    • numpy.hstack(tup):水平(按行顺序)堆叠数组
    • numpy.vstack(tup):垂直(按列顺序)堆叠数组
    • numpy.stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样!
      • axis=0:[[1 2 3] [4 5 6]],shape为(2,3)
      • axis=1:[[1 4] [2 5] [3 6]],shape为(3,2)
  • 数组拆分
    • numpy.hsplit(ary, indices_or_sections):将数组水平(逐列)拆分为多个子数组 → 按列拆分
    • numpy.vsplit(ary, indices_or_sections):将数组垂直(行方向)拆分为多个子数组 → 按行拆
  • 数组简单运算
    • 与标量的运算:数序运算
    • 最大值/最小值/平均值/方差/标准差
      • np.sum(ar,axis=0) :axis为0,按列求和
      • np.sum(ar,axis=1) :axis为1,按行求和

索引及切片

  • 基本索引及切片
    • 一维数组索引及切片,与列表相同
    • 二维数组索引及切片
      • ar[2]: 切片为下一维度的一个元素,所以是一维数组
      • ar[2][2] : 二次索引,得到一维数组中的一个值
      • ar[2:4],切片为两个一维数组组成的二维数组
      • ar[2,2],切片数组中的第三行第三列,行列用逗号隔开区分
      • ar[:2,1:],切片数组中的1,2行、2,3,4列 → 二维数组
    • 二维数组索引及切片
      • ar3[0],三维数组的下一个维度的第一个元素 → 一个二维数组
      • ar3[0][0]:三维数组的下一个维度的第一个元素下的第一个元素 → 一个一维数组
      • ar3[0][0][1]:维度为0,单个数值
  • 布尔型索引及切片
    • 以布尔型的矩阵去做筛选
      • ar1[i,:]:在第一维度做判断,只保留True,这里第一维度就是行,ar[i,:] = ar[i](简单书写格式)
      • ar1[:,j]:在第二维度做判断,这里如果ar[:,i]会有警告,因为i是3个元素,而ar在列上有4个
  • 数组索引及切片的值更改、复制
    • 一个标量赋值给一个索引/切片时,会自动改变/传播原始数组
    • 复制:独立,不改变原始数组

随机数:numpy.random

  • 标准正态分布:np.random.normal(size=(4,4))
  • 均匀分布
    • numpy.random.rand(d0, d1, ..., dn):生成一个[0,1)之间的随机浮点数或N维浮点数组
      • 生成一个随机浮点数:np.random.rand()
      • 生成形状为4的一维数组:np.random.rand(4)
      • 生成形状为2*3的二维数组,注意这里不是((2,3)):np.random.rand(2,3)
    •   
      • 1000个均匀分布的样本值并绘制散点图
  • 正态分布:
    • numpy.random.randn(d0, d1, ..., dn):生成一个浮点数或N维浮点数组,用法同上
      • 1000个均匀分布的样本值正太分布并绘制散点图
  • 随机分布:
    • numpy.random.randint(low, high=None, size=None, dtype='l'):生成一个整数或N维整数数组
    • 若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low
      • np.random.randint(2):low=2:生成1个[0,2)之间随机整数
      • np.random.randint(2,size=5):low=2,size=5 :生成5个[0,2)之间随机整数
      • np.random.randint(2,6,size=5):low=2,high=6,size=5:生成5个[2,6)之间随机整数
      • np.random.randint(5,size=(2,3)):low=5,size=(2,3):生成一个2x3整数数组,取数范围:[0,5)随机整数
      • np.random.randint(2,6,(3,5)):low=2,high=6,size=(3,5):生成一个3*5整数数组,取值范围:[2,6)随机整数
    • dtype参数:只能是int类型

数据的输入和输出

  • 存储数组数据 .npy文件
    • import os
      ar = np.random.rand(5,5)
      print(ar)
      np.save('test.npy',ar)
      print('Over')
  • 读取数组数据 .npy文件
    • ar_load = np.load('test.npy')
      print(ar_load)
  • 存储/读取文本txt文件
    • 存储np.savetxt
      • np.savetxt(fname, ar, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ')
    • 读取:np.loadtxt
      • delimiter=',' ,注意添加分割样式

本文地址:https://blog.csdn.net/FlizhN/article/details/107407480

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网