七、ndarray函数

suaxi
2025-11-17 / 0 评论 / 5 阅读 / 正在检测是否收录...

1. 基本数学函数

# 平方根
print(np.sqrt(4))
print(np.sqrt([1, 4, 9]))

arr = np.array([1, 4, 9])
print(np.sqrt(arr))

2.0
[1. 2. 3.]
[1. 2. 3.]
# 指数 e^x = y
print(np.exp(3))

20.085536923187668
# 对数 ln y = x
print(np.log(1))

0.0
# 三角函数
# 正弦
print(np.sin(1))

# 余弦
print(np.cos(np.pi))

0.8414709848078965
-1.0
# 绝对值
arr = np.array([1, 2, -3, 4, -5])
print(np.abs(arr))

[1 2 3 4 5]
# a的b次幂
print(np.power(arr, 2))

[ 1  4  9 16 25]
# 四舍五入
"""
奇进偶不进
奇进:当5前的数字是奇数时,进位:2.35 ---> 2.4
偶不进:当5前的数字是偶数时,舍去:2.45 ---> 2.4
"""
print(np.round([1.1, 2.6, 3.5, 4.5, 4.51]))

[1. 3. 4. 4. 5.]
# 向上取整
arr = np.array([1.5, 2.6, 3.7])
print(np.ceil(arr))

# 向下取整
print(np.floor(arr))

[2. 3. 4.]
[1. 2. 3.]
# 检测缺失值 NaN
arr = np.array([1, 2, np.nan, 3])
print(np.isnan(arr))

[False False  True False]


2. 统计函数

arr = np.random.randint(1, 10, 5)
print(arr)

[3 8 7 7 9]
# 求和
print(np.sum(arr))

34
# 平均值
print(np.mean(arr))

6.8
# 中位数
"""
元素个数为奇数时:先排序,再计算
元素个数为偶数时:中间两个数的平均值
"""
print(np.median(arr))
print(np.median([1, 2, 3, 4]))

7.0
2.5
# 标准差
"""
[1, 2, 3] 的平均值为2
标准差 = ((1 - 2)^2 + (2 - 2)^2 + (3 - 2)^2) / 3
"""
print(np.var([1, 2, 3]))

# 方差
"""
根据标准差和方差可以评估一组数据的离散程度,如:温度是否恒定,机器运行是否稳定
"""
print(np.std([1, 2, 3]))

0.6666666666666666
0.816496580927726
# 最值
# 最大值
print("最大值:", np.max(arr), "索引位置:", np.argmax(arr))

# 最小值
print("最小值:", np.min(arr), "索引位置:", np.argmin(arr))

最大值: 9 索引位置: 4
最小值: 3 索引位置: 0
# 分位数
arr = np.array([1, 2, 3, 4])

"""
1    2    3    4 等分为4份,中间有3段

30%时:
0.3 * 3 = 0.9
(3 - 2) * 0.9 = 0.9 + 1 = 1.9

50%时:
0.5 * 3 = 1.5
(3 - 2) * 1.5 = 1.5 + 1 = 2.5

70%时:
0.7 * 3 = 2.1
(3 - 2) * 0.1 = 0.1 + 3 = 3.1
"""
print(np.percentile(arr, 30))
print(np.percentile(arr, 50))
print(np.percentile(arr, 70))

1.9
2.5
3.0999999999999996
# 累积和
print(np.cumsum(arr))

# 累积积
print(np.cumprod(arr))

[ 1  3  6 10]
[ 1  2  6 24]


3. 比较函数

arr = np.random.randint(1, 20, 5)
print(arr)

[19  2 15 11  4]
# 大于
print(np.greater(arr, 4))

# 小于
print(np.less(arr, 4))

# 等于
print(np.equal(arr, 4))

# 矩阵间比较时需注意矩阵的形状要相同
print(np.equal(np.array([1, 2, 3]), np.array([2, 3, 4])))

[ True False  True  True False]
[False  True False False False]
[False False False False  True]
[False False False]
# 与
print(np.logical_and([1, 0], [1, 1]))

# 或
print(np.logical_or([1, 0], [1, 1]))

# 非
print(np.logical_not([1, 0]))

[ True False]
[ True  True]
[False  True]
# 检查至少有一个元素为 True
print(np.any([1, 0, 0, 0, 1]))

# 检查所有元素是否为 True
print(np.all([1, 0, 0, 0, 1]))

True
False
# 自定义条件
# 参数:判断条件,符合条件的,不符合条件的
print(np.where(arr > 5, arr, 0))
print(np.where(arr > 5, True, False))

[19  0 15 11  0]
[ True False  True  True False]
# np.select(条件, 要返回的结果, 默认值)
print(np.select([arr > 5, arr < 6], ["大于5", "小于5"], default='未知'))

['大于5' '小于5' '大于5' '大于5' '小于5']


4. 排序函数

arr = np.random.randint(1, 30, 10)
print(arr)

[11 29 21 28  5  9 23 17 20 21]
# 改变原数组
# arr.sort()
# print(arr)

# 不改变原数组
print("排序后的数组:", np.sort(arr))
print("原数组:", arr)

排序后的数组: [ 5  9 11 17 20 21 21 23 28 29]
原数组: [11 29 21 28  5  9 23 17 20 21]
# 去重(注:去重的同时也做了排序)
print(np.unique(arr))

[ 5  9 11 17 20 21 23 28 29]
# 数组拼接
arr1 = np.array([1, 2, 3])
arr2 = np.array([3, 4, 5])
print(np.concat((arr1, arr2)))

[1 2 3 3 4 5]
# 数组的分割(注:切割的份数必须能让原数组等分)
print(np.split(arr, 2))

[array([11, 29, 21, 28,  5], dtype=int32), array([ 9, 23, 17, 20, 21], dtype=int32)]
# 调整数组的形状
# 注:reshape的形状需满足能让原数组等分
print(np.reshape(arr, [5, 2]))

[[11 29]
 [21 28]
 [ 5  9]
 [23 17]
 [20 21]]
0

评论 (0)

取消