numpy-note

来源:互联网 发布:java直播系统 编辑:程序博客网 时间:2024/06/05 07:53

################## NumPy ##########################

NumPy的数组类被称作ndarray

####### 常用属性 ########
X.flags    #数组的存储情况信息。
X.shape    #结果是一个tuple,返回本数组的行数、列数、……
X.ndim     #数组的维数,结果是一个数
X.size     #数组中元素的数量
X.itemsize #数组中的数据项的所占内存空间大小
X.dtype    #数据类型
X.T        #如果X是矩阵,发挥的是X的转置矩阵
X.trace()  #计算X的迹

###### 创建
array( [ [1,2], [3,4] ], dtype=complex )
np.arange(2,3,0.1)       起点,终点,步长值。含起点值,不含终点值。
np.linspace(1,4,10)      起点,终点,区间内点数。起点终点均包括在内
np.logspace()
zeros( (3,4) )           创建给定形状的 0‘s数组
ones( (2,3,4), dtype=int16 )  创建给定形状的 1‘s数组
empty( (2,3) )           创建一个没有使用特定值来初始化的数组
zeros_like/ones_like/empty_like(数组A) 创建与数组A形状和数据类型都相同的指定数组
eye, identity            生成一个NxN的单位方阵(对角线上为1,其它地方为0) 

###### 数据类型转换
astype 方法             显式的把一个数组的dtype转换或 投射 到另外的类型
     a = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
     b = np.array([1.0,2.0])
     a.astype(float) 或 a.astype(b.dtype)
     array([ 1.25, -9.6 , 42. ])

#######  数组元素
np.where(条件)
       np.where(arr > 0, 2, -2)  arr中正值替换为2,负值替换为-2
       index = np.where(arr>2)  得到值大于2的索引号
       new_arr = arr[index]   arr中大于2的元素组成的数组
       new_arr = np.delete(arr, index)  删除arr中元素值大于2的元素
np.argwhere(条件)
np.extract([条件],a)

布尔数组 (可以用或与非等操作)
arr > 2              得到布尔数组,形如 array([False, False,  True,  True], dtype=bool)
new_arr = arr[index] arr中大于2的元素组成的数组,可以用 ~index 来得到小于2的数组

np.delete(arr, index) 删除arr中的索引为index中的元素
ndarray.all()   如果所有元素都为真,那么返回真;否则返回假
ndarray.any()   只要有一个元素为真则返回真
ndarray.ptp(axis=None, out=None)  返回数组的最大值—最小值或者某轴的最大值—最小值
ndarray.clip(a_min, a_max, out=None)   小于最小值的元素赋值为最小值,大于最大值的元素变为最大值。

numpy.repeat(a, repeats, axis=None)   重复数组的元素
numpy.tile(A, reps)         根据给定的reps重复数组A,和repeat不同,repeat是重复元素,该方法是重复数组。

numpy.put(a, ind, v, mode=’raise’)   用v的值替换数组a中的ind(索引)的值。Mode可以为raise/wrap/clip。
                                     Clip:如果给定的ind超过了数组的大小,那么替换最后一个元素。
ndarray.compress(condition, axis=None, out=None)   指定轴上条件下的切片。
ndarray.nonzero()         非零元素的索引

np.unique(arr)  类似于元素去重  纯python中的类似命令:sorted(set(list))

###### 改变形状
ndarray.reshape(shape[, order])         返回重命名数组大小后的数组,不改变元素个数.
ndarray.resize(new_shape[, refcheck])   改变数组的大小(可以改变数组中元素个数).
ndarray.transpose(*axes)                返回矩阵的转置矩阵
ndarray.swapaxes(axis1, axis2)          交换两个轴的元素后的矩阵.
ndarray.flatten([order])                复制一个一维的array出来.
ndarray.ravel([order])                  返回为展平后的一维数组.
ndarray.squeeze([axis])                 移除长度为1的轴。
ndarray.tolist()                        将数组转化为列表
hstack((a,b))  concatenate((a,b),axis=1)   水平组合
vstack((a,b))  concatenate((a,b),axis=0)   垂直组合
dstack((a,b))                                 深度组合
hsplit,vsplit,dsplit,split(split与concatenate相对应)   数组分割
arr.flat[2:6]       将数组变为1维数组,并获取其中的一部分数据

#### 统计相关函数
sum        对数组的所有或一个轴向上的元素求和。零长度的数组的和为0。 
mean       算术平均值。灵长度的数组的均值为NaN。 
std, var   标准差和方差,有可选的调整自由度(默认值为n)。 
min, max   最大值和最小值 
argmin, argmax     索引最小和最大元素。 
cumsum     从0元素开始的累计和。 
cumprod    从1元素开始的累计乘。 
ndarray.prod(axis=None, dtype=None, out=None)   指定轴的所有元素乘积

###### 随机数
numpy.random 随机数生成
np.random.rand(3,2)    产生一个3行2列的随机数组 同一空间下,有randn()/randint()等多个随机函数

##### 复数
array( [ [1,2], [3,4] ], dtype=complex )
arr.imag            获得复数的虚部
arr.real            获得复数的实部
np.angle()      复数的辐角
np.rad2deg()    弧度变为角度单位
ndarray.conj():返回所有复数元素的共轭复数

##### 数组集合操作

unique(x)            计算x单一的元素,并对结果排序
intersect1d(x, y)    计算x和y相同的元素,并对结果排序 
union1d              结合x和y的元素,并对结果排序 
in1d(x, y)           得到一个布尔数组指示x中的每个元素是否在y中 
setdiff1d(x, y)      差集,在x中但不再y中的集合 
setxor1d(x, y)       对称差集,不同时在两个数组中的元素 

###### 积分
np.trapz(y,x) # 相当于计算序列点(x,y)为顶点坐标的折线与x轴所夹的面积

###### 数组函数
abs, fabs     计算基于元素的整形,浮点或复数的绝对值。fabs对于没有复数数据的快速版本 
sqrt          计算每个元素的平方根。等价于 arr  ** 0.5 
square        计算每个元素的平方。等价于 arr  ** 2 
exp           计算每个元素的指数。 
log, log10, log2, log1p    自然对数(基于e),基于10的对数,基于2的对数和 log(1+ x) 
sign          计算每个元素的符号:1(positive),0(zero), -1(negative) 
ceil          计算每个元素的天花板,即大于或等于每个元素的最小值 
floor         计算每个元素的地板,即小于或等于每个元素的最大值 
rint          圆整每个元素到最近的整数,保留dtype 
modf          分别返回分数和整数部分的数组 
isnan         返回布尔数组标识哪些元素是 NaN (不是一个数) 
isfinite, isinf      分别返回布尔数组标识哪些元素是有限的(non-inf, non-NaN)或无限的 
cos, cosh, sin sinh, tan, tanh regular 和 hyperbolic          三角函数 
arccos, arccosh, arcsin, arcsinh, arctan, arctanh             反三角函数 
logical_not          计算基于元素的非x的真值。等价于 -arr 

add           在数组中添加相应的元素 
substract     在第一个数组中减去第二个数组 
multiply      对数组元素相乘 
divide, floor_divide       除和地板除(去掉余数) 
power         使用第二个数组作为指数提升第一个数组中的元素 
maximum, fmax     基于元素的最大值。 fmax 忽略 NaN 
minimum, fmin     基于元素的最小值。 fmin 忽略 NaN 
mod            基于元素的模(取余) 
copysign       拷贝第二个参数的符号到第一个参数 
greater, greater_equal, less, less_equal, not_equal   基于元素的比较,产生布尔数组。等价于中缀操作符 >,>=, <,
                                                      <=,==, != 
logical_and, logical_or, logical_xor                  计算各个元素逻辑操作的真值。等价于中缀操作符 &,|, ^ 

arr.round(decimals=0)    指定精度下的四舍五入

##### 矩阵
NumPy 的 matrix 类型则可以直接用运算符号进行运算
   A = np.matrix([[3, 6, -5], [1, -3, 2], [5, -1, 4]])
   B = np.matrix([[12], [-2], [10]])
   X = A ** (-1) * B

数组排序(小到大):列排列np.msort(a),行排列np.sort(a),np.argsort(a)排序后返回下标

复数排序:np.sort_complex(a)按先实部后虚部排序

数组的插入:np.searchsorted(a,b)将b插入原有序数组a,并返回插入元素的索引值

根据b中元素作为索引,查找a中对应元素:np.take(a,b)一维

数组中最小最大元素的索引:np.argmin(a),np.argmax(a)

多个数组的对应位置上元素大小的比较:np.maximum(a,b,c,…..)返回每个索引位置上的最大值,np.minimum(…….)相反

将a中元素都置为b:a.fill(b)

每个数组元素的指数:np.exp(a)

求余:np.mod(a,n)相当于a%n,np.fmod(a,n)仍为求余且余数的正负由a决定

计算平均值:np.mean(a)

计算加权平均值:np.average(a,b),其中b是权重

计算数组的极差:np.pth(a)=max(a)-min(a)

计算方差(总体方差):np.var(a)

标准差:np.std(a)

算术平方根,a为浮点数类型:np.sqrt(a)

对数:np.log(a)

点积(计算两个数组的线性组合):np.dot(a,b),即得到a*b(一维上是对应元素相乘,多维可将a*b视为矩阵乘法

修剪数组,将数组中小于x的数均换为x,大于y的数均换为y:a.clip(x,y)

所有数组元素乘积:a.prod()

数组元素的累积乘积:a.cumprod()

数组元素的符号:np.sign(a),返回数组中各元素的正负符号,用1和-1表示

数组元素分类:np.piecewise(a,[条件],[返回值]),分段给定取值,根据判断条件给元素分类,并返回设定的返回值。

判断两数组是否相等: np.array_equal(a,b)

判断数组元素是否为实数: np.isreal(a)

去除数组中首尾为0的元素:np.trim_zeros(a)

对浮点数取整,但不改变浮点数类型:np.rint(a)

中位数  np.median(a)

######### 文档
Python 读写文件文件虽然方便且效率很好,但是不太适合处理极大的文件。
当文件内容有结构,且为数字时用 NumPy 处理,存 numpy.ndarray 会更合适。

numpy.loadtxt()/numpy.savetxt()  载入txt文件
numpy.genfromtxt()/numpy.recfromcsv()  智能导入文本/csv文件
numpy.save()/numpy.load()  高速,有效率但numpy特有的二进制格式

######## numpy.linglg 函数
diag    返回一个方阵的对角线(或非对角线)元素为一个一维数组,或者转换一个一维数组到一个方阵(非对角线元素为零) 
dot     矩阵乘积 
trace   计算对角线上元素的和 
det     计算矩阵行列式 
eig     计算方阵的特征值和特征向量 
inv     计算方阵转置 
pinv    计算方阵 Moore-Penrose pseudo-inverse 的转置 
qr      计算 QR 分解 
svd     计算奇异值分解(SVD) 
solve   求解线性系统方程 Ax = b 的x,其中A是一个方阵 
lstsq   计算 y = Xb 的最小二乘解 
np.linalg.logm(A)  计算矩阵A的对数
cosm()/sinm()/signm()/sqrtm() 对矩阵进行计算
cross, dot, outer, svd, vdot  
0 0
原创粉丝点击