NumPy 数组排序
排序数组
排序数组意味着将元素按特定顺序排列。顺序可以是数字大小、字母顺序、升序或降序等。
NumPy 的 ndarray 对象提供了一个名为 sort() 的函数,用于对数组进行排序。
示例:
1import numpy as np 2 3arr = np.array([3, 2, 0, 1]) 4 5print(np.sort(arr))
输出:
1[0 1 2 3]
注意:
sort() 方法会返回数组的副本,原始数组不会被修改。
可以对字符串数组、布尔数组等其他数据类型进行排序。
排序二维数组
对于二维数组,sort() 方法会对每一行进行排序。
示例:
1import numpy as np 2 3arr = np.array([[3, 2, 4], [5, 0, 1]]) 4 5print(np.sort(arr))
输出:
1[[0 1 2] 2 [3 4 5]]
练习
使用 NumPy 正确的方法对以下数组进行排序:
1arr = np.array([3, 2, 0, 1]) 2 3x = np.sort( 4 # 请在此处填写代码 5) 6 7print(x)
解答:
1x = np.sort(arr)
NumPy 数组过滤
过滤数组
过滤数组是指从现有数组中选取部分元素,并创建新的数组。
在 NumPy 中,可以使用布尔索引列表来过滤数组。布尔索引列表是一个与数组索引相对应的布尔值列表。
如果索引处的值为 True,则该元素会被包含在过滤后的数组中;如果为 False,则会被排除。
示例:
1import numpy as np 2 3arr = np.array([41, 42, 43, 44]) 4 5x = [True, False, True, False] 6 7newarr = arr[x] 8 9print(newarr)
输出:
1[41 43]
解释:
新数组 newarr 只包含 arr 中索引为 0 和 2 的元素,因为 x 对应索引处的值为 True。
创建过滤数组
通常情况下,我们需要根据条件来创建过滤数组。
示例:
仅返回大于 42 的元素:
1import numpy as np 2 3arr = np.array([41, 42, 43, 44]) 4 5filter_arr = arr > 42 6 7newarr = arr[filter_arr] 8 9print(filter_arr) 10print(newarr)
输出:
1[False True True True] 2[43 44]
仅返回偶数元素:
1import numpy as np 2 3arr = np.array([1, 2, 3, 4, 5, 6, 7]) 4 5filter_arr = arr % 2 == 0 6 7newarr = arr[filter_arr] 8 9print(filter_arr) 10print(newarr)
输出:
1[False True False True False True False] 2[2 4 6]
直接从数组创建过滤
NumPy 提供了一种更简洁的方式来创建过滤数组,即直接在条件中使用数组:
示例:
仅返回大于 42 的元素:
1import numpy as np 2 3arr = np.array([41, 42, 43, 44]) 4 5newarr = arr[arr > 42] 6 7print(newarr)
输出:
1[43 44]
仅返回偶数元素:
1import numpy as np 2 3arr = np.array([1, 2, 3, 4, 5, 6, 7]) 4 5newarr = arr[arr % 2 == 0] 6 7print(newarr)
输出:
1[2 4 6]
练习
使用 NumPy 的直接过滤方法,从以下数组中过滤出所有平方为偶数的元素:
1import numpy as np 2 3arr = np.
NumPy 中的随机数
什么是随机数?
随机数是指无法通过确定性方法预测其值的数据。通常情况下,随机数是指在一定范围内均匀分布的数字。
在计算机中,由于程序的确定性,不可能生成真正的随机数。因此,通常使用伪随机数来代替随机数。伪随机数是通过算法生成的,但看起来像随机数。
NumPy 中的随机数生成
NumPy 提供了 random 模块用于生成随机数。该模块提供了多种方法,可以生成不同类型和分布的随机数。
生成随机整数
randint(low, high, size):生成指定范围内的随机整数。
low:下限,默认为 0。
high:上限,不包括上限本身。
size:输出数组的形状。
示例:
1import numpy as np 2 3# 生成 10 个介于 0 和 100 之间的随机整数 4x = np.random.randint(0, 101, size=10) 5print(x)
生成随机浮点数
rand(size):生成介于 0 和 1 之间的随机浮点数。
size:输出数组的形状。
示例:
1import numpy as np 2 3# 生成 5 个随机浮点数 4x = np.random.rand(5) 5print(x)
从数组中生成随机数
choice(a, size, replace):从数组 a 中随机选择元素。
a:源数组。
size:输出数组的形状。
replace:是否允许重复选择元素,默认为 False。
示例:
1import numpy as np 2 3# 从数组 [1, 2, 3, 4, 5] 中随机选择 3 个元素 4x = np.random.choice([1, 2, 3, 4, 5], size=3) 5print(x)
生成指定分布的随机数
NumPy 还提供了其他方法来生成特定分布的随机数,例如正态分布、均匀分布、指数分布等。
randn(size):生成服从标准正态分布的随机数。
randm(size):生成服从均匀分布的随机整数。
beta(a, b, size):生成服从 Beta 分布的随机数。
gamma(shape, scale, size):生成服从 Gamma 分布的随机数。
poisson(lam, size):生成服从泊松分布的随机整数。
例如,生成 10 个服从标准正态分布的随机数:
1import numpy as np 2 3x = np.random.randn(10) 4print(x)
练习
- 使用
randint方法生成一个包含 20 个介于 100 到 200 之间的随机整数的数组。 - 使用
rand方法生成一个包含 15 个介于 0 和 1 之间的随机浮点数的数组。 - 从数组
[1, 3, 5, 7, 9]中随机选择 10 个元素,并允许重复。 - 生成 5 个服从标准正态分布的随机数。
解决方案
1import numpy as np 2 3# 1. 使用 randint 方法生成随机整数数组 4random_ints = np.random.randint(100, 201, size=20) 5print(random_ints) 6 7# 2. 使用 rand 方法生成随机浮点数数组 8random_floats = np.random.rand(15) 9print(random_floats) 10 11# 3. 从数组中随机选择元素 12random_elements = np.random.choice([1, 3, 5, 7, 9], size=10, replace=True) 13print(random_elements) 14 15# 4. 生成服从标准正态分布的随机数 16normal_randoms = np.random.randn(5) 17print(normal_randoms)
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
