NDArray子类

子类相关钩子属性、方法

__array__方法

  • class.__array_ufunc__(ufunc, method, *inputs, **kwargs)

    • 功能:供自定义以覆盖numpy中ufunc行为
      • 返回操作结果,或NotImplemented (将此方法置None
    • 参数
      • ufunc:被调用的ufunc对象
      • method:字符串,指示调用的ufunc对象的方法
      • inputsufunc顺序参数元组
      • kwargsufunc关键字参数字典
    • Ufunc、与__array_ufunc__关系参见ufunc部分
  • class.__array_function__(func,types,args,kwargs)

    • 参数
      • func:任意callable,以func(*args, **kwargs) 形式调用
      • types:来自实现`
      • argskwargs:原始调用的参数
  • class.__array__finalize(obj)

    • 功能:构造之后更改self的属性
      • 在为obj类型数组分配空间时调用
    • 参数
      • objndarray子类
  • class.__array_prepare__(array,context=None)

    • 功能:在ufunc计算前,将ouput数组转换为子类实例、 更新元数据
      • 调用任何ufunc前,在最高优先级的input数组,或指定 的output数组上调用,返回结果传递给ufunc
      • 默认实现:保持原样
  • class.__array_wrap__(array,context=None)

    • 功能:在将结果返回给用户前,将output数组转换为子类 实例、更新元信息
      • ufunc计算结果返回给用户前,在最高优先级的output 数组、或指定output对象上调用
      • 默认实现:将数组转换为新
  • class.__array__([dtype])

    • 功能:若output对象有该方法,ufunc结果将被写入其 返回值中
  • 若ufunc中所有__array_ufunc__返回NotImplemented,那么 raise TypeError

__array__属性

  • class.__array_priority__
    • 功能:决定返回对象的数据类型(有多种可能性时)
      • 默认值:0.0

Matrix

np.matrix

Matrix对象:继承自ndarray,具有ndarray的属性、方法

  • Matrix对象的特殊行为
    • 维数始终为2
      • .ravel()仍然二维
      • item selection返回二维对象
    • 数学操作
      • 覆盖乘法为矩阵乘法
      • 覆盖幂次为矩阵幂次
    • 属性
      • 默认__array_priority__10.0
  • Matrix类被设计用于与scipy.sparse交互,建议不使用
  • np.matnp.matrix别名

Matrix对象property属性

Property Desc
matrix.T 转置
matrix.H 复数共轭
matrix.I 逆矩阵
matrix.A 返回ndarray

Matrix创建

Routine Desc
np.mat(data[,dtype]) 创建矩阵
np.matrix(data[,dtype,copy]) 不建议使用
np.asmatrix(data[,dtype]) 将数据转换为矩阵
np.bmat(obj[,ldict,gdict]) 从字符串、嵌套序列、数组中构建
  • mp.bmat:可使用Matlab样式字符串表示法创建Matrix
    • 空格分割列
    • ;分割行

np.matlib

  • numpy.matlib模块中包含numpy命名空间下所有函数
    • 返回matrix而不是ndarray
    • matrix被限制为小于2维,会改变形状的函数可能无法 得到预期结果
  • np.matlib是为了方便矩阵运算的模块

np.char

np.chararray

  • np.chararray类:string_unicode_数据类型的增强型 数组,继承自ndarray
    • 继承由Numarray引入的特性:项检索和比较操作中,数组 元素末尾空格被忽略
    • 定义有基于元素的+*%的操作
    • 具有所有标准stringunicode方法,可以逐元素执行
Routine Function Version
char.array(obj[,itemsize,...])
char.asarray(obj[,itemsize,...]) 转换输入为chararray,必要时复制数据
chararray(shape[,itemsize,unicode,...]) 不应直接使用此构造函数
  • np.chararray类是为了后向兼容Numarray,建议使用 object_string_unicode_类型的数组替代,并利用 numpy.char模块的自由函数用于字符串快速向量化操作

NDArray Char Routine

  • np.char/np.core.defchararray模块为np.string_np.unicode_类型的数组提供向量化的字符串操作
    • 基于标准库中stringunicode的方法

字符串操作

Routine Function Version
char.add(x1,x2)
char.multiply(a,i)
char.mod(a,values) %格式化(str.__mod__%调用方法)
char.capialize(a) 首字符大写
char.title(a) 单词首字符大写
char.center(a,width[,fillchar]) a居中、fillchar填充字符串
char.ljust(a,width(,fillchar)) a靠左
char.rjust(a,width(,fillchar)) a靠左
char.zfill(a,width) 0填充左侧
char.char.decode(a[,encoding,errors])
char.char.encode(a[,encoding,errors])
char.char.expandtabs(a[,tabsize]) 替换tab为空格
char.join(sep, seq)
char.lower(a)
char.upper(a)
char.swapcase(a)
char.strip(a[,chars])
char.lstrip(a[,chars])
char.rstrip(a[,chars])
char.partition(a,sep) 从左至右切分一次,返回三元组
char.rpartition(a,sep) 从右至左切分一次
char.split(a[,sep,maxsplit]) 从左至右切分maxsplit次,返回列表
char.rsplit(a[,sep,maxsplit])
char.splitlines(a[,keepends]) 切分行,即\n为切分点
char.replace(a,old,new[,count])

Camparison

Function Desc
equal(x1,x2)
greater(x1,x2)
less(x1,x2)
not_equal(x1,x2)
greater_equal(x1,x2)
less_equal(x1,x2)
compare_chararrays(a,b,com_op,rstrip) com_op指定比较方法

字符串信息

Function Desc
count(a,sub[,start,end]) 统计不重叠sub出现次数
startwith(a,prefix[,start,end])
endswith(a,suffix[,start,end])
find(a,sub[,start,end]) 返回首个sub位置,不存在返回-1
rfind(a,sub[,start,end]) 从右至左find
index(a,sub[,start,end]) find,不存在ValueError
rindex(a,sub[,start,end]) 从右至左index
isalpha(a)
iaalnum(a)
isdecimal(a)
isdigit(a)
islower(a)
isnumeric(a)
isspace(a)
istitle(a) 是否各单词首字符大写
isupper(a)
str_len(a)

np.rec

  • np.rec/np.core.records

np.recarray

  • np.recarray类:允许将结构化数组的字段作为属性访问
Routine Function Version
np.recarray 创建允许属性访问字段的ndarray
np.record 允许使用属性查找字段的数据类型标量

Record Arrays

Routine Function Version
core.records.array(obj[,dtype,shape,...]) 从多类型对象中创建
core.records.fromarrays(arrayList[,dtype,...]) 从数组列表中创建
core.records.fromrecords(recList[,dtype]) 从文本格式的records列表创建
core.records.fromstring(datastring[,dtype,...]) 从二进制数据字符串中创建只读
core.records.fromfile(fd[,dtype,shape,...]) 从二进制文件中创建

np.ma

ma.MaskedArray

  • ma.MaskedArray:掩码数组,是np.ma核心,ndarray子类

    • ma.MaskedArray由标准np.ndarray和掩码组成
  • 掩码数组.mask

    • 掩码可以被设置为hardmasksoftmask,由只读属性 hardmask指定
      • hardmask:无法修改被遮蔽值
      • softmask:可修改被遮蔽值,并恢复被遮蔽状态
    • .mask可以被设置
      • 为bool数组,指示各位置元素是否被遮蔽
      • ma.maskded/ma.unmask/True/False,设置掩码数组 整体是被遮蔽

属性

Attr Desc
.hardmask 硬掩码标志
.data 值数组
.mask 掩码数组、ma.unmaskma.masked
.recordmask 项目中命名字段全遮蔽则遮蔽

创建掩码数组

Routine Function Version Method Version
ma.MaskedArray(data[,mask,dtype,...])
ma.masked_array(data[,mask,dtype,...]) MaskedArray别名
ma.array(data[,dtype,copy,...]) 构造函数
ma.frombuffer(buffer[,dtype,count,offset])
ma.fromfunction(function,shape,dtype)
ma.fromflex(fxarray) 从有_data_mask字段的结构化fxarray中创建
copy(a[,order])
Ones and Zeros
Routine Function Version
ma.empty(shape[,dtype,order]) 无初始化
ma.empty_like(prototype[,dtype,order,subok,...]) shape、类型同prototype
ma.ones(shape[,dtype,order])
ma.zeros(shape[,dtype,order])
ma.masked_all(shape[,dtype]) 所有元素被屏蔽
ma.masked_all_like(shape[,dtype])

MaskedArray Routine

  • np.ma模块下的函数、ma.MaskedArray方法和ndarray 类似,但行为可能不同
    • np命名空间下部分函数(hstack等)应用在 MaskedArray
      • 操作时忽略mask(即会操作被遮罩元素)
      • 返回结果中mask被置为False
  • 这里仅记录ma模块中额外、或需额外说明部分

数组检查

Routine Function Version Method Version
ma.all(a[,axis,out,keepdims]) 全遮蔽时返回ma.masked
ma.any(a[,axis,out,keepdims]) 存在遮蔽时返回ma.masked
ma.count(arr,[axis,keepdims]) 沿给定轴统计未被遮罩元素数量
ma.count_masked(arr,[axis]) 沿给定轴统计被遮罩元素数量
ma.nonzero(a) 非0、未屏蔽元素索引
ma.is_mask(m) 是否为标准掩码数组
ma.is_masked(x) 是否包含遮蔽元素

获取、创建、修改掩码

Routine Function Version Method Version
ma.getmask(a) 返回掩码、或ma.nomaskma.masked .mask属性
ma.getmaskarray(arr) 返回掩码、或完整False数组
ma.make_mask(m[,copy,shrink,dtype]) 从数组创建掩码
ma.make_mask_none(newshape[,dtype]) 创建给定形状掩码
ma.make_mask_descr(ndtype) 为给定类型的创建掩码类型
ma.mask_rowcols(a[,axis]) 遮蔽包含遮蔽元素的axis方向分量
ma.mask_rows(a[,axis]) 缺省为0mask_rowcols()
ma.mask_cols(a[,axis]) 缺省为1mask_rowcols()
ma.mask_mask_or(m1,m2[,copy,shrink]) 掩码或
ma.harden_mask(a)
ma.soften_mask(a)
.shrink_mask() 尽可能缩小掩码
.share_mask() 复制掩码,并设置sharedmask=False

获取、创建索引

  • 索引非结构化掩码数组

    • mask为False:返回数组标量
    • mask为True:返回ma.masked
  • 索引结构化掩码数组

    • 所有字段mask均为False:返回np.void对象
    • 存在字段mask为True:返回零维掩码数组
  • 切片

    • .data属性:原始数据视图
    • .mask属性:ma.nomask或者原始mask视图
Routine Function Version Method Version
ma.nonzero(a) 未屏蔽、非0元素索引
ma.mr_[] 沿第1轴concate切片、数组、标量,类np.r_[]
ma.flatnotmasked_contiguous(a) 展平后未遮蔽切片
ma.flatnotmasked_edges(a) 展平后首个、末个未遮蔽位置
ma.notmasked_contiguous(a[,axis]) 沿给定轴,未遮蔽切片
ma.notmasked_edges(a[,axis]) 沿给定轴,首个、末个未遮蔽位置
ma.clump_masked(a) 展平后遮蔽切片
ma.clump_unmasked(a) 展位后未遮蔽切片
  • ma.mr_[]类似np.r_[],但np.r_[]返回结果掩码被置为 False,而ma.mr_[]同时也操作掩码

获取、修改值

  • 仅访问有效数据

    • 对掩码mask取反作为索引~X.mask
    • 使用.compressed方法得到一维ndarray
    1
    2
    print(X[~X.mask])
    print(X.compressed())
  • 访问数据

    • 通过.data属性:可能是ndarray或其子类的视图
      • 等同于直接在掩码数组上创建ndarray或其子类视图
    • __array__方法:ndarray
    • 使用ma.getdata函数
Routine Function Version Method Version
ma.getdata(a[,subok]) 返回掩码数组数据 .data属性
ma.fix_valid(a[,mask,copy,fill_value]) 替换a中无效值,并遮盖
ma.masked_equal(x,value[,copy])
ma.masked_greater(x,value[,copy])
ma.masked_greater_equal(x,value[,copy])
ma.masked_inside(x,v1,v2[,copy])
ma.masked_outside(x,v1,v2[,copy])
ma.masked_invalid(x[,copy])
ma.masked_less(x,value[,copy])
ma.masked_less_equal(x,value[,copy])
ma.masked_not_equal(x,value[,copy])
ma.masked_values(x,value[,rtol,atol,...])
ma.masked_object(x,value[,copy,shrink]) masked_values,适合值类型为object
ma.masked_where(condition,a[,copy]) condition遮蔽指定值

其他属性、方法

Routine Function Version Method Version
ma.common_fill_value(a,b) a,b填充值相同则返回,否则返回None
ma.default_fill_value(obj) 默认填充值
ma.maximum_fill_value(obj) 对象类型决定的最大值
ma.minimum_fill_value(obj)
ma.sef_fill_value(a,fill_value)
.get_fill_value()/.fill_value
ma.allequal(a,b[,fill_value]) a,b元素均相等,则使用fill_value填充

np.ma运算

  • 掩码数组支持代数、比较运算

    • 被遮蔽元素不参与运算,元素在运算前后保持不变
    • 掩码数组支持标准的ufunc,返回掩码数组
      • 运算中任意元素被遮蔽,则结果中相应元素被遮蔽
      • ufunc返回可选的上下文输出,则上下文会被处理, 且无定义结果被遮蔽
  • np.ma模块中对大部分ufunc有特别实现

    • 对于定义域有限制的一元、二元运算,无定义的结果会 自动mask
    1
    ma.log([-1, 0, 1, 2])
Routine Function Version Method Version
ma.anom(a[,axis,dtype]) 沿给定轴计算与算数均值的偏差

np.memmap

  • np.memmap:内存映射文件数组,使用内存映射文件作为数组 数据缓冲区

    • 对大文件,使用内存映射可以节省大量资源
  • 方法

    |Method|Desc| |——-|——-| |np.memmap(filename[,dtype,mode,shape])|创建存储在磁盘文件的内存映射数组| |np.flush()|flush内存数据至磁盘|

标准容器类

  • np.lib.user_array.container

    • 为向后兼容、作为标准容器类而引入
    • 其中self.array属性是ndarray
    • ndarray本身更方便多继承
  • 类、方法、函数

    |Method|Desc| |——-|——-| |np.lib.user_array.container(data[,...])|简化多继承的标准容器类|

Author

UBeaRLy

Posted on

2021-02-18

Updated on

2021-02-18

Licensed under

Comments