numpy中常用的统计函数
- numpy中常用统计函数
- numpy普通统计函数
- 忽略 NaN 值进行统计
- 百分位数
- numpy中形状转换函数
- 重塑数组(reshape)
- 展平数组(flatten/ravel)
- 转置(transpose/T)
- 数据类型的转换
-
- 元素值转换
- 数学转换
- np.all(), np.any()
numpy中常用统计函数
numpy普通统计函数
-🍑 np.average是加权平均值,而我们平时所说的平均值用np.mean()。
-🍑 通过指定axis参数,可以对多维数组的特定轴进行统计。
-🍑 axis=0:按列计算, axis=1:按行计算。
函数 | 描述 | 示例代码 |
---|
np.sum() | 计算数组元素的总和 | np.sum(arr), arr.sum() |
np.mean() | 计算平均值 | np.mean(arr), arr.mean() |
np.median() | 计算中位数 | np.median(arr), arr.median() |
np.min() | 计算最小值 | np.min(arr), arr.min() |
np.max() | 计算最大值 | np.max(arr), arr.max() |
np.argmin() | 返回最小值的索引 | np.argmin(arr), arr.argmin() |
np.argmax() | 返回最大值的索引 | np.argmax(arr), arr.argmax() |
np.ptp() | 计算(最大值 - 最小值) | np.ptp(arr), arr.ptp() |
np.std() | 标准差 | np.std(arr), arr.std() |
np.average() | 加权平均值 | np.average(arr) |
code:
import numpy as nparr = np.array([1, 2, 3])
weights = np.array([0.1, 0.3, 0.6])
print(np.average(arr, weights=weights)) result:
2.5
忽略 NaN 值进行统计
函数 | 描述 | 示例代码 |
---|
np.nansum() | 忽略 NaN 计算总和 | np.nansum(arr) |
np.nanmean() | 忽略 NaN 计算均值 | np.nanmean(arr) |
np.nanstd() | 忽略 NaN 计算标准差 | np.nanstd(arr) |
百分位数
- 🍓 百分位数是统计分析中常用的指标。
- 🍓 例如中位数(第 50 百分位数)、四分位数(第 25、50、75 百分位数)。
- 🍓 会自动对原来的数据进行排序,并且进行插值。
- 🍓 0-100用percentile,0-1用quantile。
函数 | 描述 | 示例代码 |
---|
np.percentile() | 计算指定百分位数的值 | np.percentile(arr, q=25) |
np.quantile() | 计算指定分位数的值(0-1 范围) | np.quantile(arr, q=0.25) |
code:
import numpy as nparr = np.array([1, 2, 3])
res_linear = np.percentile(arr, q=70, interpolation="linear")
res_lower = np.percentile(arr, q=70, interpolation="lower")
res_higher = np.percentile(arr, q=70, interpolation="higher")
res_nearest = np.percentile(arr, q=70, interpolation="nearest")
res_midpoint = np.percentile(arr, q=70, interpolation="midpoint") print(f"res_linear={res_linear}, res_lower={res_lower}, res_higher={res_higher},"f" res_nearest={res_nearest}, res_midpoint={res_midpoint},")result:
res_linear=2.4, res_lower=2, res_higher=3, res_nearest=2, res_midpoint=2.5
numpy中形状转换函数
重塑数组(reshape)
- 🌹 不改变数组数据的前提下,对数组的维度进行重新调整。
- 🌹 numpy.reshape(arr, newshape, order=‘C’)或者arr.reshape(newshape, order=‘C’)。
- 🌹 元素数量要匹配.
- 🌹 灵活的维度指定:在newshape里,至多可以有一个维度的值设为-1。
- 🌹 reshape返回的是原数组的一个视图,如果视图的数据被改变,原数据也会改变。
code:
import numpy as nparr1 = np.array([1,2,3,4,5,6,7,8])
arr2 = arr1.reshape(2, 4)
arr3 = arr2.copy()
arr2[1,2]=666
arr3.reshape(4, -1)
print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)result:
arr1:[ 1 2 3 4 5 6 666 8]
arr2:[[ 1 2 3 4][ 5 6 666 8]]
arr3:[[1 2 3 4][5 6 7 8]]
展平数组(flatten/ravel)
-🍎 flattened = reshaped.flatten() , 返回副本。
-🍎 raveled = reshaped.ravel() , # 返回视图(修改会影响原数组)。
code:
import numpy as nparr1 = np.array([1,2,3,4,5,6,7,8])
arr2 = arr1.reshape(4, -1)
arr3 = arr2.flatten()
arr4 = arr2.ravel()
arr3[4] = 666
arr4[0] = 168 print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)
print("arr4:\n", arr4)result:
arr1:[168 2 3 4 5 6 7 8]
arr2:[[168 2][ 3 4][ 5 6][ 7 8]]
arr3:[ 1 2 3 4 666 6 7 8]
arr4:[168 2 3 4 5 6 7 8]
转置(transpose/T)
- 🍐 transpose()和转置运算符T用于交换数组的维度。
- 🍐 会反转数组的维度顺序(例如,形状从 (a, b, c) 变为 (c, b, a))
- 🍐 transpose() 和 T 通常返回原数组的视图,而非副本。修改转置后的数组会影响原数组。
code:
import numpy as nparr1 = np.arange(24).reshape(2, 3, 4)
print("arr1:\n", arr1)
print(arr1.shape)arr2 = arr1.T
print("arr2:\n", arr2)
print(arr2.shape)result:
arr1:[[[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]][[12 13 14 15][16 17 18 19][20 21 22 23]]]
(2, 3, 4)
arr2:[[[ 0 12][ 4 16][ 8 20]][[ 1 13][ 5 17][ 9 21]][[ 2 14][ 6 18][10 22]][[ 3 15][ 7 19][11 23]]]
(4, 3, 2)
code:
import numpy as nparr1 = np.array([list(range(1, 4)), list(range(11, 44, 11))])
arr2 = arr1.transpose()
arr2[1,1] = 666print("arr1:\n", arr1)
print("arr2:\n", arr2)result:
arr1:[[ 1 2 3][ 11 666 33]]
arr2:[[ 1 11][ 2 666][ 3 33]]
数据类型的转换
使用astype()转换类型
- 🍍 原数据类型并不发生变化。
- 🍍 可以直接实现字符串到数字的转化。
code:
import numpy as nparr1 = np.array([1.5, 2.3, 3.7])
arr2 = arr1.astype(int)
arr3 = arr1.astype(bool)
print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)result:
arr1:[1.5 2.3 3.7]
arr2:[1 2 3]
arr3:[ True True True]
code:
import numpy as nparr1 = np.array(['1', '2', '3'])
arr2 = arr1.astype(int)
arr3 = arr2.astype(str)print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)result:
arr1:['1' '2' '3']
arr2:[1 2 3]
arr3:['1' '2' '3']
元素值转换
code:
import numpy as nparr1 = np.array([1.4945, 2.5245, 3.5221])
arr2 = np.round(arr1, 2)
arr3 = np.floor(arr1)
arr4 = np.ceil(arr1)print("arr1:\n", arr1)
print("arr2:\n", arr2)
print("arr3:\n", arr3)result:
arr1:[1.4945 2.5245 3.5221]
arr2:[1.49 2.52 3.52]
arr3:[1. 2. 3.]
数学转换
- 🍉 数值计算,np.abs(), np.sqrt(), np.exp(), np.log(),np.log10()。
- 🍉 三角函数。
功能 | 函数 |
---|
角度转弧度 | np.deg2rad(), np.radians() |
弧度转角度 | np.rad2deg(), np.degrees() |
三角函数 | np.sin(), np.cos(), np.tan() |
反三角函数 | np.arcsin(), np.arccos(), np.arctan() |
四象限反正切 | np.arctan2(y, x) |
双曲函数 | np.sinh(), np.cosh(), np.tanh() |
反双曲函数 | np.arcsinh(), np.arccosh(), np.arctanh() |
np.all(), np.any()
- 🍍 np.all()判断数组中的所有元素是否都为 True(或非零值),返回一个布尔值
- 🍍 判断数组中是否存在至少一个元素为 True(或非零值),返回一个布尔值
code:
import numpy as nparr1 = np.array([1, 2, 3])
print("np.all(arr1>0):\n", np.all(arr1>0))
print("np.all(arr1>2):\n", np.all(arr1>2))
arr2 = np.array([[True, True], [False, False]])
print(np.any(arr2, axis=0))
print(np.any(arr2, axis=1)) result:
np.all(arr1>0):True
np.all(arr1>2):False
[ True True]
[ True False]