NumPy学习笔记2

生成特殊矩阵

In [187]: ones = eye(3, dtype=int)  # 生成3 * 3的单位矩阵

In [188]: ones
Out[188]: 
array([[1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])

In [226]: zeros((2, 3), dtype=int)  # 生成2 * 3的零矩阵
Out[226]: 
array([[0, 0, 0],
       [0, 0, 0]])

读写文件

In [197]: savetxt('ones.txt', ones)  # 保存到当前路径下的ones.txt文件中

# 读取csv文件,设置分隔符`,`,获取第7至第8子段的数据,unpack为True表明不同列的数据分开存储
In [201]: c, v = loadtxt('data.csv', delimiter=',', usecols=(6, 7), unpack=True)         

一些函数

In [201]: a
Out[201]: array([1, 2, 3, 4, 5])

# average函数计算数组的平均值,此函数还有axis,weights,returned等参数可选
In [202]: average(a)
Out[202]: 3.0

# mean函数功能同average,此函数还有axis, dtype, out, keepdims等参数可选
In [220]: mean(a)
Out[220]: 3.0

# 求最小值函数
In [246]: min(a)
Out[246]: 1

# 求最大值函数
In [247]: max(a)
Out[247]: 5

# 求数组的取值范围,等于max(array) - min(array)
In [248]: ptp(a)
Out[248]: 4

# 求数组中位数
In [249]: median(a)
Out[249]: 3.0

# msort返回排序后的数组
In [253]: msort(d)
Out[253]: array([1, 2, 4, 6, 7])

# var返回数组的方差
In [257]: var(a)
Out[257]: 2.0

# std返回数组的标准差
In [261]: std(a)
Out[261]: 1.4142135623730951

# diff返回数组相邻两个元素差值
In [258]: diff(a)
Out[258]: array([1, 1, 1, 1])

# where返回所有满足指定条件的元素
In [269]: where(a > 3)
Out[269]: (array([3, 4]),)

# all返回True,如果数组元素都满足条件的话,否则返回False
In [270]: all(a > 3)
Out[270]: False

# any返回True,如果数组元素有满足条件的话,在数组元素都不满足条件时返回False
In [271]: any(a > 3)
Out[271]: True

# take返回给定下标的元素
In [279]: take(a, [0, 2, 4])
Out[279]: array([1, 3, 5])

# argmax返回给定数组最大元素的下标
In [280]: argmax(a)
Out[280]: 4

# argmin返回给定数组最小元素的下标
In [282]: argmin(a)
Out[282]: 0

# maximum返回比较的两个数组中对应位置元素最大的元素,并组成一个数组
# 如果还有第三个参数,则第三个参数接受结果数组
In [312]: a = array([8, 7, 6, 5, 4])

In [313]: b = array([4, 5, 6, 7, 8])

In [316]: maximum(a, b)
Out[316]: array([8, 7, 6, 7, 8])

# 同maximum,minimum返回两个数组中对应位置元素较小的元素,并组成一个数组
In [357]: minimum(a, b)
Out[357]: array([4, 5, 6, 5, 4])

# log返回数组中所有元素`e`的对数
In [262]: log(a)
Out[262]: array([ 0.        ,  0.69314718,  1.09861229,  1.38629436,  1.60943791])

# sqrt返回数组元素的平方根
In [272]: sqrt(a)
Out[272]: array([ 1.        ,  1.41421356,  1.73205081,  2.        ,  2.23606798])

# sum返回数组中所有元素总和
In [386]: sum(a)  # 还可以a.sum()
Out[386]: 10

# exp返回数组每个元素的e指数
In [383]: exp(a)
Out[383]: array([  1.        ,   2.71828183,   7.3890561 ,  20.08553692,  54.59815003])

# convolve返回两个一维数组data和w的线性卷积
# 卷积的概念不太好理解,不过一维数组的卷积可以理解成两个多项式乘积
In [370]: convolve(data, w)

# zeros_like返回a shape的数组,数组元素都为0
In [20]: zeros_like(a)
Out[20]: array([0, 0, 0, 0, 0])

# empty_like返回a shape的数组,数组未初始化
In [21]: empty_like(a)
Out[21]: array([0, 0, 0, 0, 0])

# clip(a, b)将a中所有小于a的元素都设为a,所有大于b的元素设为b
In [419]: a.clip(1, 2)  # array([0, 1, 2, 3, 4])
Out[419]: array([1, 1, 2, 2, 2])

# compress返回一个根据指定条件筛选后的数组
In [428]: a.compress(a > 2)
Out[428]: array([3, 4])

# prod方法返回a数组中所有元素的乘积
In [433]: a.prod()

# cumprod方法返回a数组所有元素累计乘积数组
In [435]: a.cumprod()
Out[435]: array([  1,   2,   6,  24, 120])

# cumsum方法返回a数组所有元素累计和数组
In [436]: a.cumsum()
Out[436]: array([ 1,  3,  6, 10, 15])

# 返回给定矩阵的协方差矩阵,为对称矩阵
# 第一个元素为a和a的协方差,最后一个元素为b和b的协方差,两边元素为a和b的协方差
In [440]: cov(a, b)
Out[440]: 
array([[ 2.5,  1. ],
       [ 1. ,  0.7]])

# 返回b和c的相关系数矩阵
In [458]: corrcoef(b, c)

# diagonal方法返回a的对角线上的元素       
In [452]: a.diagonal()  # a = array([[0, 1], [2, 3]])
Out[452]: array([0, 3])        

# trace方法返回a的迹
In [453]: a.trace()
Out[453]: 3

# isreal能够判断元素或者数组元素是否为实数
In [21]: isreal(al)
Out[21]: array([ True,  True,  True,  True,  True], dtype=bool)

多项式

# 用三次多项式去拟合x和y的变化关系
In [461]: np.polyfit(x, y, 3)
Out[461]: array([ 0.08703704, -0.81349206,  1.69312169, -0.03968254])   

# 预测下一个值
In [464]: polyval(z, 0.5)
Out[464]: 0.61438492063492223

# 也可以这样预测
In [467]: poly1d(z)(0.5)
Out[467]: 0.61438492063492223

# roots函数可以找到函数0值的解
In [469]: roots(z)
Out[469]: array([ 6.24151464,  3.08128307,  0.02370685])

# ployder函数可以对多项式函数求导
In [472]: polyder(z)
Out[472]: array([ 0.26111111, -1.62698413,  1.69312169])

# polysub可以对多项式作差
In [18]: polysub(al, bl)  # al = bl = [0, 1, 2, 3, 4]
Out[18]: array([0, 0, 0, 0, 0])

linalg模块

linalg模块内容比较多,会在之后的笔记中记录。

# linalg.lstsq返回A*x=b方程的解x,残差数组,A的秩,A的奇异值
In [408]: (x, residuals, rank, s) = linalg.lstsq(A, b)

# dot返回向量a,b的点积
In [411]: dot(a, b) 

其他

# sign函数可以返回数组中每个元素的正负符号,数组元素为负时返回-1,为正时返回1,否则返回0   
In [478]: sign(c)
Out[478]: array([-1, -1,  0,  1,  1])

# 也可以使用piecewise来获取元素的正负。
In [480]: piecewise(c, [c < 0, c > 0], [-1, 1])
Out[480]: array([-1, -1,  0,  1,  1])

# array_equal可以比较两个数组元素是否相同
In [492]: array_equal(b, c)
Out[492]: True

# vectorize相当于Python中map函数,结合给定的函数,和参数进行计算
In [4]: def addfunc(a, b):
   ...:     return a + b
   ...: 

In [5]: func = vectorize(addfunc)

In [6]: al = [0, 1, 2, 3, 4]

In [7]: bl = [0, 1, 2, 3, 4]

In [8]: func(al, bl)
Out[8]: array([0, 2, 4, 6, 8])

# hanning汉宁窗,计算权重,生成N的窗口
In [14]: hanning(N)
# 还有其他的平滑函数,如hamming,blackman,bartlett,kaiser

# select(condlist, choicelist, default=0),按照条件列表和对应的决策列表进行数组的判断运算
# x = array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [4]: condlist = [x < 3, x > 5]

In [5]: choicelist = [x, x ** 2]

In [8]: select(condlist, choicelist, default=-1)
Out[8]: array([ 0,  1,  2, -1, -1, -1, 36, 49, 64, 81])

# trim_zeros将去除数组首尾的0元素
In [35]: trim_zeros(a)  # a = array([0, 1, 2, 0, 4, 0, 0, 0])
Out[35]: array([1, 2, 0, 4])

你可能感兴趣的:(python,numpy)