互联网数据

email

json

  • json 模块一般只能序列化 listdict,及其衍生类型
  • py37dict 序列化不保证顺序,除非显式使用 collections.OrderedDict

mailcap

mailbox

mimetypes

base64

binhex

binascii

quopri

uu

Pywin32 设备

win32print

  • 参数
    • level:返回信息类型
      • 1:列表,无值含义说明
      • 2-5:内容逐渐省略的字典,键值对表示值含义、值
    • hPrinterwin32print.OpenPrinter 返回的打印机句柄
    • hdcwin32gui.CreateDC 返回打印机设备上下文句柄
    • pPrinterwin32print.GetPrinter 返回的 PRINTER_INFO_* 字典

打印机

  • win32print.OpenPrinter(printer, Defaults):获取指定打印机的句柄
  • win32print.GetPrinter(hPrinter, Level):获取打印机相关信息
    • Level:信息展示格式,一般设置为 2 以字典形式返回
  • win32print.GetDevicesCaps(hdc, Index):获取设备上下文相关的参数、设置
    • Index 参数代号,可以通过 win32con. 获取
    • 将打印机句柄作为 hdc 传递时,正常执行但返回结果始终为 0
  • win32print.SetPrinter(hPrinter, Level, pPrinter, Command):改变打印机配置、状态
    • Command:发送给打印机的命令,可以通过 win32print.PRINTER_CONTROL_* 查看
  • win32print.EnumPrinters(flags, name, level):枚举打印机
    • flags:指定打印机类型,可以通过 win32print.PRINTER_ENUM_<type> 获取相关类型枚举值
      • 可设置为 6 以枚举 localconnections 类型设备
  • win32print.GetDefaultPrinter/win32print.GetDefaultPrinterW
  • win32print.SetDefaultPrinter/win32print.SetDefaultPrinterW

打印机属性设置

  • 打印机属性设置方式

    1
    2
    3
    4
    5
    6
    // 获取打印相关属性
    properties = win32print.GetPrinter(hPrinter, 2)
    devmode = properties["pDevMode"]
    // 修改属性设置
    properties["pDevMode"] = devmode
    win32print.SetPrinter(hPrinter, 2, properties, 0)
  • 打印机属性常用设置

    • devmode.Color:彩印
      • 可通过 win32con.DMCOLOR_<XXX> 查看枚举值
    • devmode.PaperSize:纸张尺寸
      • 可以通过 win32con.DMPAPER_<XXXX> 查看枚举值
      • 指定此属性时,devmode.PaperLengthdevmode.PaperWidth 不生效
    • devmode.PaperLength:纸张长,单位毫米
    • devmode.PaperWidth:纸张宽,单位毫米
    • devmode.Duplex:单双面(双面分为 flip overflip up
      • 可通过 win32con.DMDUP_<XXXX> 查看枚举值
    • devmode.Orientation:打印方向,即横向、纵向
      • 可通过 win32con.DMORIENT_<XXXX> 查看枚举值
      • 真实打印时影响不大,打印至 pdf 文件时、双面打印时有影响
    • devmode.MediaType:纸张类型
    • devmode.DefaultSource:纸张来源

打印

GDI 打印

  • win32print.StartDocPrinter(hPrinter, level, tuple):通知打印 spool 将有文件加入
    • hPrinterwi32print.OpenPrinter 返回的打印机句柄
    • level:文档信息结构,此处仅支持 1 (元组)
    • tuple:按 level 指定格式设置的文档信息
      • docName:文档名
      • outputFile:输出文件名
      • dataType:文档数据类型
  • win32print.EndDocPrinter(hPrinter):结束打印机的打印任务
    • win32print.WriterPrinter 调用后使用
  • win32printer.AbortPrinter(hPrinter):删除打印机的 spool 文件
  • win32print.StartPagePrinter(hPrinter):通知打印 spool 一页将被打印
  • win32print.EndPagePrinter(hPrinter):结束打印 job 中的一页
  • win32print.WritePrinter(hPrinter, buf):将 buf 复制到打印机
    • 适合复制 raw PostscriptsHPGL 文件

GDI 打印

  • win32print.StartDoc(hdc, docinfo):在打印机设备上下文上开始 spooling 打印任务
    • hdcwin32gui.CreateDC 返回的设备上下文句柄
    • docinfo:指定打印任务参数,四元组
      • DocName:文档名
      • Output:输出文件名,仅在输出至文件时需要,正常打印时可设置为 None
      • DataType:数据类型,如:RAWEMF、TEXTNone` 使用默认
      • Type:操作模式,可选值 DI_APPBANDINGDI_ROPS_READ_DESTINATION0
  • win32print.EndDoc(hdc, docinfo):在打印机设备上下文上结束 spooling 打印任务
  • win32print.AbortDoc(hdc):取消打印 job
  • win32print.StartPage(hdc):在打印机设备上下文上开始一页
  • win32print.EndPage(hdc):在打印机设备上下文上结束一页

打印任务

  • win32print.EnumJobs(hPrinter, FirstJob, NoJobs, Level):枚举打印机上的打印 job
  • win32print.GetJob(hPrinter, JobID, Level):获取打印 job 的信息
  • win32print.SetJob(hPrinter, JobID, Level, JobInfo, Command):暂停、取消、恢复、设置优先级
    • Command:指定设置的内容,可以通过查询 win32print.JOB_CONTROL_<XXXX> 查看枚举值

打印示例

图片打印

  • 直接使用 win32gui.CreateDC

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 创建打印机上下文
    hdc = win32gui.CreateDC("WINSPOOL", printer_name, None)
    # 打开图像文件,并创建位图
    bmp = Image.Open(filename)
    dib = ImageWin.Dib(bmp)
    # 在上下文上打开文件、文件页
    win32print.StartDoc(hdc, 1, ("", None, None, 0))
    win32print.StartPage(hdc)
    # 绘制位图
    dib.draw(hdc, (x1, y1, x2, y2))
    win32print.EndPage(hdc)
    win32print.EndDoc(hdc)
    win32gui.DeleteDC(hdc)
  • 使用 win32ui.CreateDC

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 创建未初始化设备上下文
    hdc = win32ui.CreateDC()
    # 初始化上下文
    hdc.CreatePrinterDC(printer_name)
    hdc.StartDoc(filename)
    hdc.StartPage()
    bmp = Image.Open(filename)
    dib = ImageWin.Dib(bmp)
    # 获取句柄,并绘制
    dib.draw(hdc.GetHandleOutput(), (x1, y1, x2, y2))
    hdc.EndPage()
    hdc.EndDoc()
    hdc.DeleteDC()
  • 结合 win32gui.CreateDCwin32ui.CreateDC

    1
    2
    3
    4
    # 可以设置 `PDEVMODE`
    g_hdc = win32gui.CreateDC("WINSPOOL", printer_name, dev_mode)
    hdc = win32gui.CreateDCFromHandle(g_hdc)
    # 之后同上

Pywin32 应用模块

win32com

win32com.client

win32com.client.Dispatch

Word.Application

  • 创建、打开文档

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 应用对象:word应用
    app = win32com.client.Dispatch("Word.Application")
    # 文档对象
    doc = app.Documents.add()
    doc = app.Documents.Open("/path/to/file")
    # 窗口对象:文档可以在多个窗口中展示(`View`栏中可找到)(不是打开两次文档)
    window = app.windows(winNo)
    window = doc.windows(winNo)
    # 视图对象:窗口的视图属性(全部显示,域底纹,表格虚框)
    view = window.view
  • Selection 对象:选区,文档中高亮的选择区域、插入点

    • 每个窗口有自身的 Selection
    • 窗口和相应的 Selection 同时只有一个被激活
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # 当前激活窗口的选区
    s = app.Selection()
    # 1窗口的选区
    s1 = app.Windows(1).Selection
    # 替换选区内容,选区变为输入文本整体
    s.Text = "Hello, world!"
    # 输入内容,选区变为文本后插入点
    s.TypeText("hello, world!")
    # 拷贝选区
    s.Copy()
    # 粘贴内容至选区
    s.Paste()
    # 变换选区
    s.Start = 0
    s.End = 1
    # 删除
    s.Delete()
    # 全选
    s.WholeStory()
    # 移动选区:<wdunits>:移动单位:1-字符,
    s.MoveLeft(<wdunits>, <nums>)
    s.MoveRight()
  • Range 对象:连续区域,由 <start><end> 位置定义

    • 区分文档不同部分
    • Range 独立于 Selection
    • 可以定义多个 Range
    • 属性、方法类似 Selection
    1
    2
    r = doc.Range(<start>, <end>)
    r = s.Range()
  • Font 对象:字体属性(名称、字号、颜色等)

    1
    2
    3
    4
    font = s.Font
    font = r.Font
    font.name = "仿宋"
    font.size = 16
  • ParagraphFormat 对象:段落格式(对齐、缩进、行距、边框底纹等)

    1
    2
    3
    4
    5
    6
    7
    8
    pf = s.ParagraphFormat
    pf = r.ParagraphFormat
    # 对齐方式:0-左对齐,1-居中对齐,2-右对齐
    pf.Alignment = 0
    # 行间距:0-单倍,1-1.5倍,2-双倍
    pf.LineSpacingRule = 0
    # 左缩进:单位:磅
    pf.LeftIndent = 21
  • PageSetup 对象:页面设置(左边距、右边距、纸张大小)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ps = doc.PageSetup
    ps = s.PageSetup
    ps = r.PageSetup
    # 上边距:单位:磅(1cm = 28.35磅)
    cm2pound = 28.35
    ps.TopMargin = 79
    # 页面大小:6-A3,7-A4
    ps.PageSize = 7
    # 布局模式
    ps.LayoutMode = 1
    # 行字符数
    ps.CharsLine = 28
    # 行数:自动设计行间距
    ps.LinesPage = 22
  • 样式集:文档中内置、用户定义的样式

    1
    2
    3
    4
    5
    styles = doc.Styles
    # 获取样式:-1-正文,-2-标题1,-3-标题2,-4-标题3,-32-页眉,-63-标题
    normal = styles(-1)
    normal.Font.Name
    normal.Font.Size = 16

Pywin32 图形化模块

win32gui

  • win32gui 提供对原生 win32 GUI API 的接口

Device Context

  • win32gui.CreateDC(Driver, Device, InitData):为打印机、显示器创建设备上下文
    • Driver:显示器、打印机供应商名称
    • Device:设备名,如打印机名称
    • InitDataPyDEVMODE 指定打印参数
  • win32gui.CreateCompatibleDC(hdc):创建兼容指定设备的内存设备上下文
    • hdc:上下文句柄
  • win32gui.SetMapMode(hdc, MapMode):设置逻辑(页空间)单位至设备(空间)单位的映射方式
    • MapMode:映射方式,可通过 win32con.MM_<XXXX> 查看枚举值
  • win32gui.SetViewportExtEx(hdc,XExtent,YExtent):设置 DC 可视区域的 extent
    • XExtent/YExtentX/Y 方向逻辑长度
  • win32gui.SetWindowExtEx(hdc,XExtent,YExtent):设置 DC 窗口的长度
  • win32gui.SetWindowOrg(hdc,X,Y):设置 DC 可视区域起始位置
    • X/YX/Y 方向的逻辑坐标
  • 设置逻辑长度即将 DC 的可视区域空间进行线性变换(映射),而避免对需展示信息进行线性变换
  • viewport 是整个可视区域,window 是可是区域中用于展示信息的部分,windowOrg 则是 window 在信息中的偏移

窗口

  • win32gui.EnumWindows(callback, ctx):遍历所有窗口

    1
    2
    3
    4
    5
    6
    def winEnumHandler(hwnd, ctx):
    if win32gui.IsWindow(hwnd) and win32gui.IsWindowsEnabled(hwnd) and wind32gui.IsWindowVisible(hwnd):
    print(hwnd, win32gui.GetWindowText(hwnd))
    ctx.append(hwnd)
    hwnd_list = []
    win32gui.EnumWindows(winEnumHandler, hwnd_list)
  • win32gui.EnumChildWindows(parent_hwnd, callback, ctx):遍历窗口的子窗口

  • win32gui.ShowWindow(hwnd, status):根据status设置窗口状态

    |常量|大小|显示状态|激活状态| |——-|——-|——-|——-| |win32con.SW_HIDE|不变|隐藏|不变| |win32con.SW_MAXSIZE|最大化|不变|不变| |win32con.SW_MINISIZE|最小化|不变|不变| |win32con.SW_RESTORE|恢复正常|不变|不变| |win32con.SW_SHOW|不变|显示|激活| |win32con.SW_SHOWMAXIMIZED|最大化|显示|激活| |win32con.SW_SHOWMINIMIZED|最小化|显示|激活| |win32con.SW_SHOWNORMAL|恢复正常|显示|激活| |win32con.SW_SHOWMINNOACTIVE|最小化|显示|不变| |win32con.SW_SHOWNA|不变|显示|不变| |win32con.SW_SHOWNOACTIVE|恢复正常|显示|不变|

  • win32gui.SetForegroundWindow(hwnd)

win32ui

  • win32uiwin32gui 差别
    • win32gui 是对微软底层接口的直接封装
    • win32ui 则是对 win32gui

Device Context

  • win32ui.CreateDC():创建未初始化的设备上下文
  • win32ui.CreateDCFromHandle(handle):从句柄中创建上下文

Pywin32 接口

说明

  • pywin32 包是对 windows 提供接口的封装,和 C/CPP 接口内容相近

win32api

Shell

  • win32api.ShellExecute(hwnd, op, file, params, dir, bShow)
    • hwnd:父窗口句柄
    • op:操作,"open""print"
    • file:需要执行操作的文件
    • params:待执行操作的文件为可执行文件时,需要传递的参数
    • dir:应用执行的初始文件夹
    • bShow:应用打开时是否展示

Keyboard

  • win32api.keybd_event(bVk, bScan, dwFlags, dwExtraInfo) )
    • bVk:虚拟键码,可通过 win32con.VK_<KEY> 获取
    • bScan:硬件扫描码,一般设置为 0
    • dwFlags:一般设置为 0,表示按键按下
      • win32con.KEYEVENTF_EXTENDEDKEY
      • win32con.KEYEVENTF_KEYUP:按键释放
    • dwExtraInfo:与击键相关的附加的32位值,一般设置为 0

NDArray 科学计算

NumPy Numeric

矩阵、向量乘积

Function Desc
dot(a,b[,out]) a最后轴与b倒数第二轴的点积,即shape满足线代要求
inner(a,b[,out]) a最后轴与b最后轴的点积
vdot(a,b) 向量点积,多维将被展平
outer(a,b[,out]) 向量外积,多维将被展平
matmul(x1,x2,/[,out,casting,order,...]) 矩阵乘积
tensordot(a,b[,axes]) 沿指定轴计算张量积
einsum(subscripts,*operands[,out,dtype,...]) Einstein求和约定
einsum_path(subscripts,*operands[,optimize]) 考虑中间数组情况下评估计算表达式最小代价
linalg.matrix_power(a,n) 方阵幂
kron(a,b) Kronecker积(矩阵外积,分块)
trace(a[,offset,axis1,axis2,dtype,out])
  • Einstein求和约定:简化求和式中的求和符号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    a = np.arange(0,15).reshape(3,5)
    b = np.arange(1,16).reshape(3,5)
    # Transpose
    np.einsum("ij->ji", a)
    # Sum all
    np.einsum("ij->", a)
    # Sum along given axis
    np.einsum("ij->i", a)
    np.einsum("ij->j", a)
    # Multiply
    np.einsum("ij,ij->",a,b)
    # Inner product
    np.einsum("ik,jk->",a,b)
  • np.tensordot:张量积,类似普通内积,仅有结构

    • axes为整形
      • axes>0a末尾axes维度、b开头axes维度 内积
      • axes=0:Kronecker积
    • axes为2-Tuple:分别指定ab内积的轴

其他

|Function|Desc| |np.i0(X)|第1类修改的Bessel函数,0阶|

np.linalg

  • NumPy的线代基于BLASLAPACK提供高效的标准底层实现
    • 依赖库可以是NumPy提供的C版本子集
    • 也可是针对特定平台优化的库(更好)
      • OpenBLAS
      • MKL
      • ATLAS

np.linalg

Function Desc
multi_dot(arrays) 自动选择最快的计算顺序计算内积
cholesky(a) cholesky分解
det(a) 行列式
eig(a) 特征值、特征向量(右乘)
eigh(a[,UPLO]) Hermitian(共轭对称)或实对称矩阵特征值、特征向量
eigvals(a) 特征值
eigvalsh(a[,UPLO]) Hermitian(共轭对称)或实对称矩阵特征值
inv(a) 矩阵逆
lstsq(a,b[,rcond]) 最小二乘解
norm(x[,ord,axis,keepdims]) 矩阵、向量范数
pinv(a[,rcond,hermitian]) Moore-Penrose伪逆
solve(a,b) 线程方程组求解
tensorsolve(a,b[,axes]) 张量方程组求解
tensorrinv(a[,ind]) 张量逆
svd(a[,full_matrices,compute_uv,hermitian]) 奇异值分解
qr(a[,mode]) QR分解
matrix_rank(M[,tol,hermitian]) 使用SVD方法计算矩阵秩
slogdet(a) 行列式的符号、自然对数
  • 部分线代函数支持传入高维数组、数组序列,同时计算结果
    • 对高维数组,要求数组最后2、1维度满足计算要求

(快速)傅里叶变换np.fft

Standard FFTs

Function Desc
fft(a[,n,axis,norm]) 1维离散傅里叶变换
fft2(a[,n,axes,norm]) 2维离散FFT
fftn(a[,n,axes,norm]) N维离散FFT
ifft(a[,n,axis,norm]) 1维离散逆FFT
ifft2(a[,n,axes,norm]) 2维离散逆FFT
ifftn(a[,n,axes,norm]) N维离散逆FFT

Real FFTs

Function Desc
rfft(a[,n,axis,norm]) 1维离散傅里叶变换
rfft2(a[,n,axes,norm]) 2维离散FFT
rfftn(a[,n,axes,norm]) N维离散FFT
irfft(a[,n,axis,norm]) 1维逆离散FFT
irfft2(a[,n,axes,norm]) 2维离散逆FFT
irfftn(a[,n,axes,norm]) N维离散逆FFT

Hermitian FFTs

Function Desc
hfft(a[,n,axis,norm]) Hermitian对称(实谱)的信号的FFT
ihfft(a[,n,axis,norm]) Hermitian对称(实谱)的信号的逆FFT

其他

Function Desc
fftfreq(n[,d]) 离散FFT样本频率
rfftfreq(n[,d])
fftshift(x[,axes]) 平移0频成分到频谱中间
ifftshift(x[,axes])

np.lib.scimath

  • np.lib.scimath中包含一些顶层命名空间的同名函数

    • 相较于顶层空间,其定义域被扩展,相应其值域也扩展到 复数域

      1
      np.emath.log(-np.e) == 1 + np.pi * 1j
  • np.emathnp.lib.scimath模块的推荐别名

NDArray Routine

Array Manipulation

Shape Only

Routine Function Version Method Version
reshape(a,newshape[,order])
resize(a,new_shape) 大小可不同,重复a补不足 0补不足
ravel(a[,order]) 展平视图
.flatten([order]) 展平副本
shape(a)
size(a)

Order Alteration

Routine Function Version Method Version
transpose(a[,axes]) 调整轴顺序,缺省逆序即转置
moveaxis(a,source,destination) 移动数组轴到新位置
rollaxis(a,axis[,start]) 将指定后向插入至指定位置(缺省0)
swapaxes(a,axis1,axis2) 交换轴
flip(m[,axis]) 沿指定轴反向,缺省所有轴
fliplr(m) 左右反向(沿第2轴)
flipud(m) 上下反向(沿第1轴)
roll(a,shift[,axis]) 沿轴滚动shift
rot90(m[,k,axes]) axes指定的平面中旋转k次90度
lib.stride_tricks.as_strided(x[,shape,...]) 利用给定shape、stride在x上创建视图

维数改变

Routine Function Version Method Version
atleast_1d(*arys) prepend维度直至维度至少维数至少1
atleast_2d(*arys)
atleatt_3d(*arys)
broadcast(*arys) 广播、打包输入对应元素的元组迭代器,类似zip
broadcast_to(array,shape[,subok]) 广播为指定shape
boradcast_arrays(*args,**kwargs) 输入的广播结果列表
expand_dims(a,axis) 在指定位置插入新轴
squeeze(a[,axis]) 删除大小为1维度

插入、删除元素

Routine Function Version
delete(arr,obj[,axis]) 删除obj指定部分,缺省按展平数组删除
insert(arr,obj,values[,axis]) 缺省按展平数组插入
append(arr,values[,axis]) 缺省arrvalues展平再添加
trim_zeros(filt[,trim]) trim前导、尾随0,缺省两边

改变类型

Routine Function Version Method Version
asarray(a[,dtype,order]) 转换为数组
asarray_chkfinite(a[,dtype,order]) 检查NaNinf
asanyarray(a[,dtype,order]) 转换为数组,数组子类则不变
ascalar(a) 将大小为1的数组转换为等效标量
require(a[,dtype,requirements]) 创建满足要求ndarray.flags数组
asfortranarray(a[,dtype]) 转换为Fortran-contiguous风格内存布局
ascontiguousarray(a[,dtype]) 转换为C-contiguous风格内存布局
asmatrix(data[,dtype])
asfarray(a[,dtype]) 转换为浮点类型
.astype(dtype[,order,casting,...]) 转换为指定类型
  • numpy中数组不是仅有C、Fortran风格内存布局,对数组的形态 变换会导致内存布局不为任何风格内存布局

组合数组

Routine Function Version
concatenate((a1,a2,...)[,axis,out]) 沿现有轴连接数组
stack(arrays[,axis,out]) 创建给定(新)轴堆叠数组
row_stack(tup)/vstack(tup) 沿第1(竖直)轴堆叠
column_stack(tup)/hstack(tup) 沿第2(水平)轴堆叠
dstack(tup) 沿第3轴堆叠
block(arrays) 按照arrays中给定数组块、位置组装

拆分数组

Routine Function Version
split(ary,indices_or_sections[,axis]) 沿轴拆分成视图
array_split(ary,indices_or_sections[,axis]) split,但可处理不整除拆分
vsplit(ary,indices_or_sections) 沿第1(竖直)轴拆分
hsplit(ary,indices_or_sections) 沿第2(水平)轴拆分
dsplit(ary,indices_or_sections) 沿第3轴拆分

Padding

Function Desc
pad(array,pad_width[,mode])

Index Routine

  • 结果数组shape考虑逻辑链

    • 确定输出数组的维数ndim
    • 确定参数数组原维度轴位置、补1轴位置,参数维度轴对齐
    • 修正各维度大小
      • 沿轴操作:保持不变
      • 沿轴采样:采样数目
      • 沿轴concate:维度相加
      • 沿轴聚集:删除维度
      • 沿轴切片聚集:删除其余维度
  • numpy中(多维)索引往往使用整数高级索引的方式返回

    • np.ndarray数组:首维度各分量分别表示各维度的高级 索引
    • list、tuple:各元素分别为各维度的高级索引

数组无关切片、高级索引

Routine Function Version 返回值类型
s_[] 支持多维切片生成,类slice() 切片、元组
index_exp[] s_,但总返回元组 元组
r_[] 沿第1轴concate切片、数组、标量 数组
c_[] 沿第-1轴concate切片、数组、标量(1维则被视为列向量) 数组
ravel_multi_index(multi_index,dims[,mode,order]) 计算高级索引multi_indexdims数组展平后的位置 数组
unravel_index(indices,shape[,order]) ravel_multi_index逆向 元组
  • np.r_[]np.c_[]除可concate切片方便生成数组,还可以 传递两个参数修改行为

    • r/c字符被设置时,返回矩阵

      • 1维数组,r被设置时返回1 N矩阵,c被设置时 返回N 1矩阵
      • 2维数组,rc被设置时,结果矩阵相同
    • <axis>[,<ndim>,<ori_pos>]三个整形,决定shape

      |参数|说明|np.r_[]缺省值|np.c_[]缺省值| |——-|——-|——-|——-| |<axis>|concate执行轴|0|-1| |<ndim>|目标维数,仅在其大于结果维数时才生效|1|2| |<ori_pos>|原数据轴所在的位置|-1,即prepend全1轴|0,即postpend全1轴|

    • 相同参数时,两者结果相同,可根据不同数组设置合适的 参数相互实现

      • np.r_[]可视为参数缺省为0,1,-1
      • np.c_[]可视为参数缺省为-1,2,0
  • np.r_np.c_分别是np.lib.index_tricks.RClassnp.lib.index_tricks.CClass实例
  • np.s_np.index_exp均是 np.lib.index_tricks.IndexExpression实例,仅初始化参数 不同

网格

Routine Function Version 返回值类型
ix_(*args) args为基点创建开网格(仅设置基点、维度) 元组
meshgrid(*xi,**kwargs) xi作为基点创建稠密网格(所有网格点高级索引) 列表
mgrid[] 根据切片创建稠密网格 数组
ogrid[] 根据切片创建开网格 列表
indices(dimensions[,dtype,sparse]) dimensions作为各维度长创建网格 数组、元组
  • 开网格广播即可得到稠密网格

值相关索引

Routine Function Version Method Version
nonzero(a) 非0元素整形高级索引
where(condition,[x,y]) condition对应整形高级索引,给出x,y时则从中抽取元素
flatnonzero(a) 展平非0位置

特殊位置索引

Routine Function Version
diag_indices(n[,ndim]) ndim维长为n数组对角索引
diag_indices_from(arr) 获取arr对角索引
mask_indices(n,mask_func[,k]) 根据mask_func获取n * n数组索引
tril_indices(n[,k,m]) n * m的下三角索引
triu_indices(n[,k,m]) n * m的上三角索引
tril_indices_from(arr[,k]) arr的下三角索引
triu_indices_from(arr[,k]) arr的下三角索引
  • np.ndindex(*args) == np.broadcast(*np.indices(*args))

Searching 索引

Routine Function Version Method Version
argwhere(a) 非0点坐标数组
argmax(a[,axis,out]) 展平后位置,存在NaN则返回0
argmin(a[,axis])
nanargmax(a[,axis]) 忽略NaN
nanargmin(a[,axis])
searchsorted(a,v[,side,sorter]) 应插入(保持有序)位置

Value Manipulation

Value Extraction

Routine Function Version Method Version
take(a,indices[,axis,out,mode]) indices沿给定轴获取超平面(缺省将数组展平)
take_along_axis(arr,indices,axis) arrindices沿axis匹配,选取元素
compress(condition,a[,axis,out]) 按bool数组condition沿给定轴axis选取超平面(缺省将数组展平)
extract(condition,arr) 在展平数组上抽取元素
choose(a,choices[,out,mode]) 根据a广播后元素值选择choices中数组填充对应位置
select(condlist,choicelist[,default]) condlist中首个真值对应的choicelist数组填充对应位置
diag(v[,k]) 从2维v抽取对角、或以1维v作为对角
diagonal(a[,offset,axis1,axis2]) 返回给定对象
  • take:沿给定轴从数组中获取元素

    • axisNone时,按展平后获取indices指定元素, 非None
      • 函数行为同高级索引
      • 指定axis可以简化通过高级索引获取指定轴的元素
    • 基本元素为数组在该轴的切片
    1
    2
    3
    4
    5
    6
    Ni, Nk = a.shape[:axis], a.shape[axis+1:]
    Nj = indices.shape
    for ii in np.ndindex(Ni):
    for jj in np.ndindex(Nj):
    for kk in np.ndindex(Nk):
    out[ii+jj+kk] = a[ii+(indices[jj],)+kk]
  • take_along_axis:匹配给定轴方向的1维索引、数据切片, 获取元素

    • 基本元素为单个元素
      • indicesarr对齐,除给定维度外,其余维度 大小均须相同
      • 其余维度给定下,按照indices在超平面上给出的 位置获取对应的元素
      • take以超平面为单位获取整个超平面的元素,而 take_along_axis按元素为单位,沿给定轴方向调整 元素顺序
    • np.argsortnp.argpartition等函数能够返回适合此 函数的索引
    1
    2
    3
    4
    5
    6
    7
    8
    9
    N1, M, Nk = arr.shape[:axis], arr.shape[axis], arr.shape[axis+1:]
    J = indices.shape[axis]
    out = np.empty(Ni + (J,) + Nk)
    for ii in np.ndindex(Ni):
    for kk in np.ndindex(Nk):
    a_1d = arr[ii + np.s_[:,] + kk]
    indices_1d = indices[ii + np.s_[:,] +kk]
    out_1d = out[ii + np.s_[:,] + kk]
    out_1d = a_1d[indices_1d[j]]
  • np.choose

    • choices:数组序列,其中数组和a需广播兼容
      • 若本身为数组,则其最外层被视为序列
    • 逻辑
      • achoices中数组共同广播
      • 广播结果的shape即为结果shape,其中a取值为n 处用数组choices[n]填充
    1
    np.choose(a,choices) == np.array([choices[a[I]][I] for I in np.ndindex(a.shape)])
  • np.select

    • 使用各位置condlist首个真值出现的位序值构建a,则 等价于np.choose(a,choicelist) (不考虑缺省值)
  • np.extract

    • 等价于np.compress(np.ravel(condition), np.ravel(arr))
    • condition为bool数组,也等价于arr[condition]

Value Modification

Routine Function Version Method Version
place(arr,mask,vals) 按照mask循环使用vals中值替换arr中元素
put(a,ind,v[,mode]) place,但根据展平索引ind替换
put_along_axis(arr,indices,values,axis) 匹配indicesarr沿axis分量,替换值
copyto(dst,src[,casting,where]) 根据bool数组where替换dst中元素
putmask(a,mask,values) copyto
fill_diagonal(a,val[,wrap]) val填充a的主对角
clip(a,a_min,a_max[,out=None,**kwargs]) 裁剪值
  • wheremaskcondition缺省为、等价为bool数组
  • np.clipufunc

Sorting

Routine Function Version Method Version
sort(a[,axis,kind,order,]) 在位排序
lexsort(keys[,axis]) 根据keys中多组键沿axis轴排序(靠后优先级高)
msort(a) 沿第1轴排序
argsort(a[,axis,kind,order]) 沿axis方向间接排序
sort_complex(a) 先实、后虚排序
partition(a,kth[,axis,kind,order]) 以第kth大小数划分
argpartition(a,kth[,axis,kind,order]) 间接分段
  • lexsort:按照axis方向、以keys中数组顺序作为权重 进行间接排序
    • keys:数组序列或2维以上数组
      • 数组最高维视为序列
      • keys为数组时,最高维被省略
      • 多个数组视为权重不同的排序依据,靠后优先级高
    • axis:排序所沿轴方向,缺省为-1,沿最低维轴排序
      • 可视为按keys中数组逆序优先级,取用各数组沿轴 方向的间接排序结果
      • 即对每个第1轴、axis构成平面,优先考虑第1轴末尾 axis方向数组进行排序,再依次考虑前序
    • lexsortargsort排序方向相同时,lexsort结果中 最后子数组和argsort结果应差别不大 (排序方向相同而不是axis参数取值相同)

Logical Test

真值测试

Routine Function Version Method Version
all(a[,axis,out,keepdims]) 给定轴方向所有元素为真
any(a[,axis,out,keepdims]) 给定轴方向存在元素为真

数组内容

Routine Function Version
isfinite(x,/[,out,where,casting,order,...]) 逐元素是否有限
isinf(x,/[,out,where,casting,order,...])
isnan(x,/[,out,where,casting,order,...])
isnat(x,/[,out,where,casting,order,...]) 逐元素是否NaT
isneginf(x,/[,out])
isposinf(x,/[,out])
  • isneginfisposinf行为类似ufunc,但不是

类型测试

Routine Function Version
iscomplex(x)
iscomplexobj(x) 复数类型或复数值
isfortran(a) Fortran contiguous
isreal(x)
isrealobj(x) 实数类型或实数值
isscalar(x)

Mathmatics

  • 部分数学函数为ufunc

UFunc初等运算

Function Desc
add(x1,x2,/[out,where,casting,order,...])
subtract(x1,x2,/[,out,where,casting,...])
multiply(x1,x2,/[,out,where,casting,...])
divide(x1,x2,/[,out,where,casting,...])
true_devide(x1,x2,/[,out,where,casting,...])
floor_devide(x1,x2,/[,out,where,casting,...])
logaddexp(x1,x2,/[,out,where,casting,...]) ln(x1+x2)
logaddexp2(x1,x2,/[,out,where,casting,...]) log_2 (x1+x2)
negative(x,/[,out,where,casting,order,...])
positive(x,/[,out,where,casting,order,...])
power(x1,x2,/[,out,where,casting,order,...]) x1^x2
float_power(x1,x2,/[,out,where,casting,...]) x1^x2
remainder(x1,x2,/[,out,where,casting,...]) 求余/取模
mod(x1,x2,/[,out,where,casting,order,...]) 求余/取模
fmod(x1,x2,/[,out,where,casting,order,...]) 求余/取模
divmod(x1,x2,/[,out1,out2],/[out,...])
absolute(x,/[,out,where,casting,order,...])/abs
rint(x,/[,out,where,casting,order,...])
sign(x,/[,out,where,casting,order,...])
heaviside(x1,x2,/[,out,where,casting,...]) 阶跃函数
conj(x,/[,out,where,casting,...]) 对偶
exp(x,/[,out,where,casting,order,...])
exp2(x,/[,out,where,casting,order,...])
log(x,/[,out,where,casting,order,...])
log2(x,/[,out,where,casting,order,...])
log10(x,/[,out,where,casting,order,...])
expm1(x,/[,out,where,casting,order,...]) 计算exp(x)-1
log1p(x,/[,out,where,casting,order,...]) 计算ln(x+1)
sqrt(x,/[,out,where,casting,order,...]) 非负平方根
square(x,/[,out,where,casting,order,...])
cbrt(x,/[,out,where,casting,order,...]) 立方根
reciprocal(x,/[,out,where,casting,order,...]) 倒数
gcd(x,/[,out,where,casting,order,...]) 最大公约数
lcm(x,/[,out,where,casting,order,...]) 最小公倍数
  • out参数可用于节省内存,如:G=A*B+C
    • 等价于:t1=A*B; G=t1+C; del t1;
    • 可利用out节省中间过程内存:G=A*B; np.add(G,C,G)

UFunc Floating函数

Routine Function Version
fabs(x,/[,out,where,casting,order,...]) 不可用于复数
signbit(x,/[,out,where,casting,order,...]) signbit是否设置,即<0
copysign(x1,x2,/[,out,where,casting,order,...]) 根据x1设置x2signbit
nextafter(x1,x2,/[,out,where,casting,order,...]) x1朝向x2的下个浮点数,即变动最小精度
spacing(x,/[,out,where,casting,order,...]) x和最近浮点数距离,即取值的最小精度
modf(x[,out1,out2],/[,out,where],...) 返回取值的整数、小数部分
ldexp(x1,x2,/[,out,where,casting,...]) 计算x1*2**x2,即还原2为底的科学计数
frexp(x[,out1,out2],/[,out,where],...) 返回2为底的科学计数的假数、指数
floor(x,/,out,*,where,...)
ceil(x,/,out,*,where,...)
trunc(x,/,out,*,where,...)
rint(x,/[,out,where,casting,order,...]) 最近整数
around(a[,decimals,out])/round/round_
fix(x[,out]) 向零点取整
  • np.fix不是ufunc,但行为类似

比较函数

  • 数值比较

    • np.equal()更多应用于整形比较,比较浮点使用 np.isclose()更合适
    • np.allclose()则是判断数组整体是否相同
    • array_equal(a1,a2)数组a1a2相同
    • array_equiv(a1,a2)数组a1a2广播后相同
  • 逻辑运算符

    • &|~:逐元素逻辑运算
      • 优先级高于比较运算符
    • andornot:整个数组的逻辑运算
  • np.maximum()np.minimum()函数

    • max()寻找最大值效率比np.maximum.reduce()低,同样 min()效率也较低

UFunc比较函数

Routine Function Version Method Version
greater(x1,x2,/[,out,where,casting,...]) >
greater_equal(x1,x2,/[,out,where,casting,...]) >=
less(x1,x2,/[,out,where,casting,...]) <
less_equal(x1,x2,/[,out,where,casting,...]) <=
not_equal(x1,x2,/[,out,where,casting,...]) !=
equal(x1,x2,/[,out,where,casting,...]) ==
logical_and(x1,x2,/[,out,where,casting,...]) 逐元素and and
logical_or(x1,x2,/[,out,where,casting,...]) or
logical_xor(x1,x2,/[,out,where,casting,...])
logical_not(x1,x2,/[,out,where,casting,...]) not
maximum(x1,x2,/[,out,where,casting,...]) 逐元素选择较大者
minimum(x1,x2,/[,out,where,casting,...]) 逐元素选择较小者
fmax(x1,x2,/[,out,where,casting,...]) 逐元素选择较大者,忽略NaN
fmin(x1,x2,/[,out,where,casting,...]) 逐元素选择较小者,忽略NaN

非UFunc

Routine Function Version
isclose(a,b[,rtol,atol,equal_nan]) 逐元素容忍度范围内相等
allclose(a,b[,rtol,atol,equal_nan]) all(isclose())
array_equal(a1,a2[,equal_nan]) 数组整体
array_equiv(a1,a2) 广播后相等

UFunc Bit-twiddling函数

Routine Function Version
bitwise_and(x1,x2,/[,out,where,...])
bitwise_or(x1,x2,/[,out,where,...])
bitwise_xor(x1,x2,/[,out,where,...])
invert(x,/[,out,where,casting,...])
left_shift(x1,x2,/[,out,where,casting...])
left_shift(x1,x2,/[,out,where,casting...])

UFunc 三角函数

Routine Function Version
sin(x,/[,out,where,casting,order,...])
cos(x,/[,out,where,casting,order,...])
tan(x,/[,out,where,casting,order,...])
arcsin(x,/[,out,where,casting,order,...])
arccos(x,/[,out,where,casting,order,...])
arctan(x,/[,out,where,casting,order,...])
arctan2(x1,x2,/[,out,where,casting,order,...]) 考虑象限下,arctan(x1/x2)
hypot(x1,x2,/[,out,where,casting,order,...]) 计算斜边
sinh(x,/[,out,where,casting,order,...]) 双曲正弦
cosh(x,/[,out,where,casting,order,...])
tanh(x,/[,out,where,casting,order,...])
arcsinh(x,/[,out,where,casting,order,...])
arccosh(x,/[,out,where,casting,order,...])
arctanh(x,/[,out,where,casting,order,...])
deg2rad(x,/[,out,where,casting,order,...]) 角度转换为弧度
rad2deg/degrees(x,/[,out,where,casting,order,...]) 弧度转换为角度

基本数学

Routine Function Version Method Version
prod(a[,axis,dtype,out,keepdims,...])
nanprod(a[,axis,dtype,out,keepdims,...])
sum(a[,axis,dtype,out,keepdims,...])
nansum(a[,axis,dtype,out,keepdims,...])
cumprod(a[,axis,dtype,out,keepdims,...]) 累乘(也可用ufunc.accumulate
cumsum(a[,axis,dtype,out,keepdims,...]) 累加
nancumprod(a[,axis,dtype,out,keepdims,...]) NaN视为1
nancumsum(a[,axis,dtype,out,keepdims,...]) NaN视为0
diff(a[,n,axis,prepend,append,...]) 沿给定轴1阶差分(保持类型不变,注意溢出)
ediff1d(ary[,to_end,to_begin] 沿展平顺序1阶差分
gradient(f,*varargs,**kwargs) 梯度
cross(a,b[,axisa,axisb,axisc,axis]) 向量叉积
trapz(y[,x,dx,axis]) 梯形法则定积分

复数运算

Routine Function Version Method Version
angle(z[,deg]) 角度
real(val) 实部
imag(val) 虚部
conj/conjugate(x,/[,out,where,casting,order,...]) 复共轭

Miscellaneous

Routine Function Version
nan_to_num(x[,copy,nan,posinf,neginf]) 替换NaNinf为数值
real_if_close(a[,to]) 虚部接近0则省略
interp(x,xp,fp[,left,right,period]) 1维线性插值
polyfit(x,y,deg[,rcond,full,w,cov]) 最小二乘多项式拟合

Statistics

  • axis=None:默认值None,表示在整个数组上执行操作

Count

Routine Function Version
count_nonzero(a[,axis])

顺序

Routine Function Version Method Version
amin/min(a[,axis,out,keepdims,initial,where])
amax/max(a[,axis,out,keepdims,initial,where])
nanmin(a[,axis,out,keepdims,initial,where]) 忽略NaN
nanmax(a[,axis,out,keepdims,initial,where])
ptp(a[,axis,out,keepdims]) 极差
percentile(a,q[,axis,out,...]) q取值[0-100]
nanpercentile(a,q[,axis,out,...])
quantile(a,q[,axis,out,overwrite_input,...]) q取值[0,1]
nanquantile(a,q[,axis,out,...])

均值、方差

Routine Function Version Method Version
median(a[,axis,out,overwrite_input,keepdims])
average(a[,axis,weights,returned])
mean(a[,axis,dtype,out,keepdims])
std(a[,axis,dtype,out,ddof,keepdims]) 标准差
var(a[,axis,dtype,out,ddof,keepdims]) 方查
nanmedian(a[,axis,out,overwrite_input,...])
nanmean(a[,axis,dtype,out,keepdims])
nanstd(a[,axis,dtype,out,ddof,keepdims])
nanvar(a[,axis,dtype,out,ddof,keepdims])

相关系数

Routine Function Version
corrcoef(x[,y,rowvar,bias,ddof]) Pearson积差相关系数
correlate(a,v[,mode]) 卷积
convolve(a,v[,mode]) 离散、线性卷积
cov(m[,y,rowvar,bias,ddof,fweights,...]) 方差

Array Creation

Ones and Zeros

Routine Function Version
empty(shape[,dtype,order]) 无初始化
empty_like(prototype[,dtype,order,subok,...]) shape、类型同prototype
eye(N[,M,k,dtype,order]) 对角为1的2D数组
identity(n[,dtype]) 单位矩阵数组
ones(shape[,dtype,order])
ones_like(a[,dtype,order,subok,shape])
zeros(shape[,dtype,order])
zeros_like(a[,dtype,order,subok,shape])
full(shape,fill_value[,dtype,order]) full_value数组
full_like(a,fill_value[,dtype,order,...])

Numerical Ranges

Routine Function Version
arange([start,]stop[,step][,dtpye]) 给定间距
linspace(start,stop[,num,endpoint]) 给定数量,等差均分
geomspace(start,stop[,num,endpoint,base,...]) 等比均分
logspace(start,stop[,num,endpoint,base,...]) log10尺度上均分,同np.power(10, np.linspace(start,stop))

Repetition

Routine Function Version Method Version
tile(A,reps) 重复A(可是数组)创建一维数组
repeat(a,repeats[,axis]) 沿已有轴重复a创建

Matrix-Relative

Routine Function Version
diag(v[,k]) 从2维v抽取对角、或以1维v作为对角
diagflat(v[,k])
tri(N[,M,k,dtype]) 对角线及以下为1、其余为0矩阵
tril(m[,k]) 下三角
triu(m[,k]) 上三角
vander(x[,N,increasing]) Vandermonde矩阵

From Existing Data

Routine Function Version
array(object[,dtype,copy,order,subok,ndmin])
copy(a[,order])
frombuffer(buffer[,dtype,count,offset] 从缓冲(如字节串)创建数组
fromfunction(function,shape,**kwargs) 以坐标为参数,从函数创建数组
fromiter(iterable,dtype[,count])
  • 改变数组数据类型也可以视为是创建新数组

转入、转出

类型转出

Routine Method Version
.item(*args) 根据args选择元素复制至标准python标量
.tolist() 转换为.ndim层嵌套python标量列表
.itemset(*args) 插入元素(尝试转换类型)
.byteswap([inplace]) 反转字节序
.view([dtype,type]) 创建新视图
.getfield(dtype[,offset]) 设置数据类型为指定类型
.setflags([write,align,uic]) 设置标志
.fill(value) 使用标量填充

打包二进制

Function Desc
packbits(a[,axis,bitorder]) 元素打包为标志位,0补足,返回uint8数组
upackbits(a[,axis,bitorder])

输入、输出

Routine 格式 输入 输出
dump(file) pickle 文件
tofile(fid[,sep,format]) 内存内容(sep="")、分割符串 文件
fromfile(file[,dtype,count,sep,offset]) 字节串、分割符串 文件 数组
save(file,arr[,allow_pickle,fix_imports]) .npy 数组 文件
savez(file,*args,**kwds) 非压缩的.npz (多个)数组 文件
savez_compressed(file,*args,**kwds) 压缩的.npz (多个)数组
load(file[,mmap_mode,allow_pickle,...]) .npy.npz、pickle 文件 数组
savetxt(fname,X[,fmt,delimiter,newline,...]) 分割符串 二维以下数组 文件
loadtxt(fname[,dtype,comments,delimiter,...]) 分割符串 文件 数组
genfromtxt(fname[,dtype,comments,...]) 分割符串 文件 数组
fromregex(file,regexp,dtype[,encoding]) 正则表达式结构 文件 数组

Routine Function Version Method Version
array2string(a[,max_line_width,precision,...]) __str__
array_repr(arr[,max_line_width,precision,...]) __repr__
array_str(arr[,max_line_width,precision,...]) __str__
dumps() pickle序列化
loads(*args,**kwargs) pickle 字节串 数组
tobytes([order])/tostring 内存内容字节串
fromstring(string[,dtype,count,sep]) 从字符串、字节串(sep="",且缺省)创建1维数组
  • np.loadspickle.loads,不建议使用
  • np.fromstring
    • sep="":从二进制字节串中创建数组,类frombuffer
    • sep置为分割符时,只能指定一种元素分隔符,也只能 解析1维数组的字符串

字符串输出格式

Routine Function Version
format_float_positional(x[,precision,...]) 格式化位置计数
format_float_scientific(x[,precision,...]) 格式化科学计数
set_printoptions([precision,threshold,...])
get_printoptions()
set_string_function(f[,repr])
printoptions(*args,**kwargs) 设置打印选项的上下文管理器
binary_repr(num[,width]) 二进制字符串
base_repr(number[,base,padding])

Data Source

Function Desc
DataSource([destpath]) 通用数据源文件(file,http,ftp等)

Numpy 性能

Miscellaneous

性能调优

Function Desc
setbufsize(size) 设置ufunc使用的缓冲区大小
getbufsize()
shares_memory(a,b[,max_work])
may_share_memory(a,b[,max_work])
byte_bounds(a) 返回指向数组结尾的指针

Array Mixin

Function Desc
lib.mixins.NDArrayOperatorsMixin 定义了所有使用array_ufunc特殊方法
lib.NumpyVersion(vstring) 解析、比较NumPy版本
get_include() 返回头文件目录
deprecate(*args,**kwargs) 废弃警告
deprecate_with_doc(msg)
who([vardict]) 在指定字典中打印数组
disp(mesg[,device,linefee]) 展示信息

浮点错误处理

  • 错误处理
    • 设置硬件平台上注册的错误处理,如:除零错误
    • 基于线程设置
Function Desc
seterr([all,divide,over,under,invalid]) 设置浮点错误处理
seterrcall(func) 设置浮点错误回调或log
geterr() 获取当前处理浮点错误的方法
geterrcall() 获取当前处理浮点错误回调函数
errstate(**kwargs) 浮点错误处理上下文
seterrobj(errobj) 设置定义浮点错误处理的对象
geterrobj() 获取定义浮点错误处理的对象

NumPy帮助

Function Desc
lookfor(what[,module,import_modules]) 在文档中搜索关键词
info([object,maxwidth,output,toplevel]) 获取帮助信息
source(object[,output]) 获取源码

Numpy 附加库

财金

Function Desc
fv(rate,nper,pmt,pv[,when]) 未来值
pv(rate,nper,pmt[,fv,when]) 现值
npv(rate,values) 净现值
pmt(rate,nper,pv[,fv,when]) 等额本息,每期付款
ppmt(rate,per,nper,pv[,fv,when]) 等额本息中第per期本金
ipmt(rate,per,nper,pv[,fv,when]) 等额本息中第per期利息
irr(values) 内部收益率
mirr(values,finance_rate,reinvest_rate) 考虑期内再融资成本finance_rate、收益再投资收益reinvest_rate
nper(rate,pmt,pv[,fv,when]) 每期付款
rate(nper,pmt,pv,fv[,when,guess,tol,...]) 每期间的利率
  • 参数说明

    • pv:现值
    • fv:未来值
    • when:期初或期末付款
      • 0/end
      • 1/begin
    • pmtPayment,每期付款
    • ppmtPrinciple of Payment,每期付款中本金
    • ipmtInterest of Payment,每期付款中利息
  • 值说明

    • 正值:收入
    • 负值:支出

Histogram

Function Desc
histogram(a[,bins,range,normed,weights,...])
histogram2d(x,y[,bins,range,normed,weights,...])
histogramdd(sample[,bins,range,normed,weights,...])
bincount(x[,weights,minlength])
histogram_bin_edges(a[,bin,range,weights])
digitize(x,bins[,right])

Set

Operation

Routine Function Version
in1d(ar1,ar2[,assume_unique,invert]) 是否包含,始终返回1维数组
isin(element,test_element[,...]) 保持elementshape返回
intersect1d(ar1,ar2[,assume_unique,...]) 交集
union1d(ar1,ar2[,assume_unique,...]) 并集
setdiff1d(ar1,ar2[,assume_unique,...]) ar1-ar2
setxor1d(ar1,ar2[,assume_unique,...]) 差集

Unique

Routine Function Version
unique(ar[,return_index,return_inverse,return_counts,axis]) 返回唯一值

Numpy 索引

索引、切片

基本切片、索引

  • 基本切片[Slice]start:stop:step(基本同原生类型切片)

    • startstop负值时,按维度长取正模
    • step>0时,start缺省为0stop缺省为维度长N
    • step<0时,start缺省为N-1stop缺省为-N-1
    • stopstart可以超过维度长N
  • Ellipsis/...:放在切片中表示选择所有

    • ...存在的场合,结果总是数组而不是数组标量,即使其 没有大小
  • np.newaxis/None:为切片生成数组在所在位置添加长度为 1的维度

  • 切片可以用于设置数组中的值

  • 基本切片可认为是依次对各维度切片,若靠前维度为索引,则 可以把靠前维度独立出来
  • 基本切片生成的所有数组始终是原始数组的视图,也因此存在 切片引用的数组内存不会被释放
  • 注意:基本索引可用于改变数组的值,但是返回值不是对数组 中对应值的引用

高级索引

  • 选择对象为以下类型时会触发高级索引

    • 非元组序列
    • ndarray(整形或boolean类型)
    • 包含至少一个序列、ndarray(整型或boolean类型)的 元组
  • 高级索引总是返回数据的副本

    • 高级索引结果不能保证任何内存布局

整数索引

  • 整数索引X[obj]允许根据其各维度索引选择数组X任意元素

    • 各整数索引(数组)表示对应维度的索引
    • 各维度索引迭代、连接得到各元素位置:zip(obj*)
    • 索引维数小于数组维数时,以子数组作为元素 (可以理解为索引和数组高维对齐后广播)
  • 整数索引结果shape由obj中各维度索引shape决定

    • 整数索引obj中各维度索引数组会被广播
      • 各维度索引shape可能不同
      • 为保证各维度索引能正常迭代选取元素,各维度索引 shape需要能被广播、符合广播要求
    • 则高级索引出现场合
      • “普通索引(标量值)”不存在,必然被广播
      • 切片能够共存
  • 切片(包括np.newaxis)和高级索引共存时

    • 高级索引特点导致其结果维度不可割
      • “标量索引”本应削减该维度
      • 而高级索引整体(广播后)决定唯一shape
    • 高级索引结果维度应整体参与结果构建
      • 高级索引被切片分割:高级索引结果维度整体提前
      • 高级索引相邻:高级索引结果维度填充至该处
  • 高级索引操作结果中无元素,但单个维度索引越界的错误未定义
  • 高级索引结果内存布局对每个索引操作有优化,不能假设特定 内存顺序
1
2
3
4
5
6
7
8
X = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]])
rows = [0, 3]
cols = [0, 2]
# 整数索引
X[np.ix_(rows, cols)]
# 整数索引数组
X[[[1,2],[2,1]],:]
X.take([[1,2],[2,1]], axis=0)

Boolean索引

  • Boolean索引obj选择其中True处位置对应元素

    • 索引obj维数较数组X小,直接抽取子数组作为元素 (可以理解为索引和数组高维对齐后广播)
    • 索引obj在超出数组X.shape范围处有True值,会引发 索引错误
    • 索引objX.shape内未填充处等同于填充False
  • Boolean索引通过.nonezero方法转换为高级整数索引实现

    • Boolean索引等价于True数量长的1维整数索引
      • X[..,bool_obj,..]等价于 X[..,bool_obj.nonzero(),..]
      • Boolean索引总是削减对应索引,展开为1维
    • Boolean索引、高级整数索引共同存在场合行为诡异
      • Boolean索引转换为等价的整数索引
      • 整数索引需要广播兼容转换后整数索引
      • 整数索引、转换后整数索引整体得到结果
  • 索引obj和数组X形状相同计算速度更快

字段名称形式访问

  • ndarray中元素为结构化数据类型时,可以使用字符串索引 访问
    • 字段元素非子数组时
      • 其shape同原数组
      • 仅包含该字段数据
      • 数据类型为该字段数据类型
    • 字段元素为子数组时
      • 子数组shape会同原数组shape合并
    • 支持字符串列表形式访问
      • 返回数组视图而不是副本(Numpy1.6后)