首先Numpy 可以进行加减乘除运算的前提是:Shape相同,或者满足广播规则,广播规则请点击这里;
numpy 进行加减乘除时,可以使用运算符号,即:+,-,*,/
,也可以使用对应的函数: add()
,subtract()
,multiply()
和 divide()
;比较简单明了,举例如下:
a = np.arange(12).reshape(3,4)
b = np.array([1,2,3,4])
print(a+b)
print (np.add(a,b))
# [[ 1 3 5 7]
# [ 5 7 9 11]
# [ 9 11 13 15]]
print(a-b)
print (np.subtract(a,b))
# [[-1 -1 -1 -1]
# [ 3 3 3 3]
# [ 7 7 7 7]]
print(a*b)
print (np.multiply(a,b))
# [[ 0 2 6 12]
# [ 4 10 18 28]
# [ 8 18 30 44]]
print(a/b)
print (np.divide(a,b))
# [[0. 0.5 0.66666667 0.75 ]
# [4. 2.5 2. 1.75 ]
# [8. 4.5 3.33333333 2.75 ]]
sin()
、cos()
、tan()
、arcsin()
,arccos()
, arctan()
需要特别注意的一点是:三角函数的传入值,默认情况下是弧度制;常见三角函数,举例如下:
a = np.array([0,30,45,60,90])
sin = np.sin(a*np.pi/180)
print(sin) # [0. 0.5 0.70710678 0.8660254 1. ]
print(np.arcsin(sin)) # [0. 0.52359878 0.78539816 1.04719755 1.57079633]
cos = np.cos(a*np.pi/180)
print(cos) # [1.00000000e+00 8.66025404e-01 7.07106781e-01 5.00000000e-01 6.12323400e-17]
print(np.arccos(cos)) # [0. 0.52359878 0.78539816 1.04719755 1.57079633]
tan = np.tan(a*np.pi/180)
print(tan) # [0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00 1.63312394e+16]
print(np.arctan(tan)) # [0. 0.52359878 0.78539816 1.04719755 1.57079633]
numpy.degrees()
利用numpy.degrees() 可以将弧度制转化为角度制,举例如下:
a = np.array([0,30,45,60,90])
sin = np.sin(a*np.pi/180) # 这里的sin输出的为对应角的sin值;
print(np.degrees(np.arcsin(sin))) # 这里为先取arcsin(),再将结果转化为角度制,输出为:[ 0. 30. 45. 60. 90.]
numpy.around()
使用 numpy.around()
函数,可以返回指定小数位数的四舍五入结果,格式如下:
numpy.around(a,decimals)
参数 | 说明 |
---|---|
a | 待四舍五入的数组 |
decimal | 四舍五入后的小数位数,默认值为0。 如果为负,整数将四舍五入到小数点左侧的位置 |
举例如下:
a = np.array([111.11111,222.33333,444.55555,666.8888,777.9999])
print(np.around(a,2))
# [111.11 222.33 444.56 666.89 778. ]
print(np.around(a,-2)) # 四舍五入到小数点左边两位
# [100. 200. 400. 700. 800.]
numpy.ceil()
使用 numpy.ceil()
函数,可以返回向上取整的结果,举例如下:
a = np.array([111.11111,222.33333,444.55555,666.8888,777.9999])
print(np.ceil(a)) # [112. 223. 445. 667. 778.]
这个时候,有聪明的小伙伴会问,那如果我想要让小数点后两位的地方进行向上取整呢?(这里叫向上取整似乎不是很科学,但是领悟精神);我们只需要简单的运算就可以,举例如下:
a = np.array([111.11111,222.33333,444.55555,666.8888,777.9999])
print(np.ceil(a*100)/100)
# [111.12 222.34 444.56 666.89 778. ]
np.set_printoptions(formatter={'float':'{:.2f}'.format})
上面的输出方法中,有些小数点后的0没有被显示,所以可以使用如下方法输出:
a = np.array([111.11111,222.33333,444.55555,666.8888,777.9999])
np.set_printoptions(formatter={'float':'{:.2f}'.format}) # 设置np的显示位数
print(np.ceil(a*100)/100)
# [111.12 222.34 444.56 666.89 778.00]
numpy.floor()
使用 numpy.floor()
函数,可以返回向下取整的结果,举例如下:
a = np.array([111.11111,222.33333,444.55555,666.8888,777.9999])
print(np.floor(a*100)/100)
# [111.11 222.33 444.55 666.88 777.99]
np.power()
格式:np.power(a, b)
,其中,a,b 可以是任意满足Shape相同,或者满足广播规则的数组,a 为底数,b 为指数;
b = np.array([1,2,3,4])
print(np.power(b,2))
# [ 1 4 9 16]
numpy.mod()
格式:numpy.mod(a, b)
,其中,a,b 可以是任意满足Shape相同,或者满足广播规则的数组,最终的结果为 a/b 之后的余数,举例如下:
b = np.array([1,2,3,4])
print(np.mod(b,2))
# [1 0 1 0]
numpy 提供了非常多的统计运算函数,包含:最大值,最小值,极差,标准差,方法等等,现列举如下常用统计函数:
numpy.amin()
和 numpy.amax()
numpy.amin()
用于计算numpy数组中的元素沿某个指定轴的最小值,若不指定轴,则返回整个数组中的最小值。
numpy.amax()
用于计算numpy数组中的元素沿某个指定轴的最大值,若不指定轴,则返回整个数组中的最大值。
当轴的设置为0时,返回每个列的最小值;当轴设置为1时,返回每个行的最小值;
举例如下:
a = np.arange(9).reshape(3,3)
print(a)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
print(np.amin(a))
# 0
print(np.amin(a,0))
# [0 1 2]
print(np.amin(a,1))
# [0 3 6]
print(np.amax(a))
# 8
print(np.amax(a,0))
# [6 7 8]
print(np.amax(a,1))
# [2 5 8]
numpy.ptp()
使用 numpy.ptp()函数计算数组的极差,即元素最大值与最小值的差(最大值 - 最小值)。
a = np.arange(9).reshape(3,3)
# [[0 1 2]
# [3 4 5]
# [6 7 8]]
print(np.ptp(a))
# 8
print(np.ptp(a,0))
# [6 6 6]
print(np.ptp(a,1))
# [2 2 2]
numpy.percentile()
分位数是统计学中常用的统计量,其中:四分之一分位数,中位数,四分之三分位数 是箱型图中最重要的三个值; 在Numpy中,我们可以使用numpy.percentile() 来计算一个数组的分位数,格式如下:
numpy.percentile(a, q, axis)
参数 | 解释 |
---|---|
a | 输入的数组 |
q | 需要计算的分位数,范围为0 ~ 100; |
axis | 指定计算的轴的方向,不输入则为整个数组计算分位数 |
举例如下:
a = np.arange(100).reshape(10,10)
print(np.percentile(a,25))
# 25.75
print(np.percentile(a,25,axis=0))
# [23.5 24.5 25.5 26.5 27.5 28.5 29.5 30.5 31.5 32.5]
print(np.percentile(a,25,axis=1))
# [ 3.25 13.25 23.25 33.25 43.25 53.25 63.25 73.25 83.25 93.25]
numpy.median()
中位数就是百分之五十分位数,使用方法也很简单,举例如下:
a = np.arange(100).reshape(10,10)
print(np.percentile(a,50))
print(np.median(a)) # 两个输出是完全一样的;
# 49.5
print(np.percentile(a,50,axis=0))
print(np.median(a,axis=0))
# [45. 46. 47. 48. 49. 50. 51. 52. 53. 54.]
print(np.percentile(a,50,axis=1))
print(np.median(a,axis=1))
# [ 4.5 14.5 24.5 34.5 44.5 54.5 64.5 74.5 84.5 94.5]
numpy.mean()
Numpy 中 numpy.mean()
函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。
a = np.arange(100).reshape(10,10)
print(np.mean(a))
# 49.5
print(np.mean(a,axis=0))
# [45. 46. 47. 48. 49. 50. 51. 52. 53. 54.]
print(np.mean(a,axis=1))
# [ 4.5 14.5 24.5 34.5 44.5 54.5 64.5 74.5 84.5 94.5]
numpy.average()
该函数与numpy.mean()
的区别为,numpy.average()
可以计算加权平均数,即:可以根据权重来计算平均值;若我们不给权重参数,则numpy.average()
与numpy.mean()
是一样的,举例如下:
a = np.arange(9).reshape(3,3)
print(np.average(a)) # 4.0
print(np.mean(a)) # 4.0
b= np.array([1,2,3])
print(np.average(a,axis=0,weights=b))
# [4. 5. 6.]
print(np.average(a,axis=1,weights=b))
# [1.33333333 4.33333333 7.33333333]
解释:数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。
加权平均值 = (1*4+2*3+3*2+4*1)/(4+3+2+1)
,和我们大学计算平均分是一样的;
numpy.std()
标准差是统计学中最常用的统计量之一,主要用来度量一组数据的分散程度,标准差的公式为:sqrt(mean((x - x.mean())**2))
,在Numpy中计算标准差非常容易,举例如下:
a = np.arange(100).reshape(10,10)
print(np.std(a))
# 28.86607004772212
print(np.std(a,axis=0))
# [28.72281323 28.72281323 28.72281323 28.72281323 28.72281323 28.7228132 28.72281323 28.72281323 28.72281323 28.72281323]
print(np.std(a,axis=1))
# [2.87228132 2.87228132 2.87228132 2.87228132 2.87228132 2.87228132 2.87228132 2.87228132 2.87228132 2.87228132]
numpy.var()
统计中的方差是每个样本值与全体样本值平均数之差的平方值的平均数,即 mean((x - x.mean())** 2)
。
换句话说,标准差是方差的平方根。
a = np.arange(100).reshape(10,10)
print(np.var(a))
# 833.25
print(np.var(a,axis=0))
# [825. 825. 825. 825. 825. 825. 825. 825. 825. 825.]
print(np.var(a,axis=1))
# [8.25 8.25 8.25 8.25 8.25 8.25 8.25 8.25 8.25 8.25]
字符串相关函数,在numpy中使用的不是很多,仅了解就好;
函数 | 解释 |
---|---|
numpy.char.add() | numpy.char.add() 函数依次对两个数组的元素进行字符串连接。 |
numpy.char.multiply() | numpy.char.multiply() 函数执行多重连接。 |
np.char.center(str , width,fillchar) | numpy.char.center() 函数用于将字符串居中,并使用指定字符在左侧和右侧进行填充。 |
numpy.char.capitalize() | 将字符串的第一个字母转换为大写; |
numpy.char.title() | 函数将字符串的每个单词的第一个字母转换为大写; |
numpy.char.lower() | 对数组的每个元素转换为小写; |
numpy.char.upper() | 对数组的每个元素转换为大写; |
numpy.char.split() | 指定分隔符对字符串进行分割,并返回数组。默认情况下,分隔符为空格。 |
numpy.char.splitlines() | 以换行符作为分隔符来分割字符串,并返回数组。 \n,\r,\r\n 都可用作换行符。 |
numpy.char.strip() | 用于移除开头或结尾处的特定字符。 |
numpy.char.join() | 通过指定分隔符来连接数组中的元素或字符串。 |
numpy.char.replace() | 使用新字符串替换字符串中的所有子字符串。 |
numpy.char.encode() | 对数组中的每个元素调用 str.encode 函数。 默认编码是 utf-8,可以使用标准 Python 库中的编解码器。 |
numpy.char.decode() | 对编码的元素进行 str.decode() 解码。 |