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 np
arr = 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 np
arr = 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 np
arr1 = 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 np
arr1 = 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 np
arr1 = 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 np
arr1 = np.array([list(range(1, 4)), list(range(11, 44, 11))])
arr2 = arr1.transpose()
arr2[1,1] = 666
print("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 np
arr1 = 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 np
arr1 = 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 np
arr1 = 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(或非零值),返回一个布尔值