欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python基础笔记_numpy的基础语法

程序员文章站 2022-04-16 16:22:21
科学计算工具包:Numpy高级数值编程工具强大的N维数组对象:ndarray对数组结构数据进行运算(不用遍历循环)随机数、线性代数、傅里叶变换等功能基础数据结构数组的属性ar.ndim:输出数组维度的个数(轴数),或者说‘秩’ar.shape:输出数组的维度,对于n行m列的数组,shape为(n,m)ar.size:输出数组中元素的个数type(ar),ar.dtype:输出数组的类型以及其中元素的类型ar.itemsize:输出数组中每个元素的字节大小,...

科学计算工具包: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)
    •   python基础笔记_numpy的基础语法
      • 1000个均匀分布的样本值并绘制散点图
  • 正态分布:
    • numpy.random.randn(d0, d1, ..., dn):生成一个浮点数或N维浮点数组,用法同上
    • python基础笔记_numpy的基础语法
      • 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

相关标签: python