第六章:Numpy 随机数生成与文件操作
6.1 Numpy 随机数生成
在很多场景下,如模拟实验、机器学习模型评估等,我们需要生成随机数。Numpy 提供了丰富的函数来生成各种分布的随机数。
6.1.1 生成均匀分布随机数
- np.random.rand():生成在 [0, 1) 区间内均匀分布的随机浮点数。可以传入一个或多个整数参数来指定生成数组的形状。
- 示例:
import numpy as np
# 生成一个随机浮点数
single_random = np.random.rand()
print("单个随机浮点数:", single_random)
# 生成一个形状为 (3, 2) 的二维数组
random_array = np.random.rand(3, 2)
print("形状为 (3, 2) 的随机数组:\n", random_array)
在上述代码中,np.random.rand() 无参数调用时,返回一个在 [0, 1) 之间的随机浮点数。传入参数 3, 2 时,生成一个 3 行 2 列的二维数组,数组元素均为 [0, 1) 区间内的随机浮点数。
6.1.2 生成正态分布随机数
- np.random.randn():生成服从标准正态分布(均值为 0,标准差为 1)的随机浮点数。同样可以通过参数指定生成数组的形状。
- 示例:
import numpy as np
# 生成一个服从标准正态分布的随机浮点数
single_normal = np.random.randn()
print("单个正态分布随机浮点数:", single_normal)
# 生成一个形状为 (2, 3) 的二维数组
normal_array = np.random.randn(2, 3)
print("形状为 (2, 3) 的正态分布随机数组:\n", normal_array)
这里,np.random.randn() 无参数时返回单个服从标准正态分布的随机数。传入 2, 3 生成一个 2 行 3 列的二维数组,数组元素是服从标准正态分布的随机浮点数。
6.1.3 生成指定范围内的随机整数
- np.random.randint():生成在指定范围内的随机整数。函数参数包括下限(包含)、上限(不包含)以及生成数组的形状。
- 示例:
import numpy as np
# 生成一个在 1 到 10(不包含 10)之间的随机整数
single_int = np.random.randint(1, 10)
print("单个随机整数:", single_int)
# 生成一个形状为 (2, 2) 的二维数组,元素在 0 到 5(不包含 5)之间
int_array = np.random.randint(0, 5, size=(2, 2))
print("形状为 (2, 2) 的随机整数数组:\n", int_array)
np.random.randint(1, 10) 返回一个 1 到 9 之间的随机整数。np.random.randint(0, 5, size=(2, 2)) 生成一个 2 行 2 列的二维数组,数组元素在 0 到 4 之间。
6.2 Numpy 文件操作
Numpy 支持将数组保存到文件以及从文件中读取数组,这在数据持久化和共享数据时非常有用。
6.2.1 保存数组到文件
- np.save():将数组保存为 .npy 文件。第一个参数是文件名(不需要包含 .npy 后缀),第二个参数是要保存的数组。
- 示例:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
np.save('saved_array', arr)
上述代码将数组 arr 保存为名为 saved_array.npy 的文件。
- np.savez():用于将多个数组保存到一个 .npz 文件中。可以通过关键字参数指定数组的名称。
- 示例:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
np.savez('saved_arrays', a = arr1, b = arr2)
这里将 arr1 和 arr2 保存到 saved_arrays.npz 文件中,在文件中 arr1 对应的名称为 a,arr2 对应的名称为 b。
6.2.2 从文件读取数组
- np.load():用于从 .npy 或 .npz 文件中读取数组。对于 .npz 文件,返回的是一个类似字典的对象,需要通过保存时指定的名称来获取数组。
- 示例:
import numpy as np
# 读取.npy 文件
loaded_arr = np.load('saved_array.npy')
print("从.npy 文件读取的数组:", loaded_arr)
# 读取.npz 文件
loaded_arrays = np.load('saved_arrays.npz')
arr_from_npz1 = loaded_arrays['a']
arr_from_npz2 = loaded_arrays['b']
print("从.npz 文件读取的数组 a:", arr_from_npz1)
print("从.npz 文件读取的数组 b:", arr_from_npz2)
np.load('saved_array.npy') 从 .npy 文件中读取数组。对于 .npz 文件,np.load('saved_arrays.npz') 返回一个对象,通过该对象的键 'a' 和 'b' 分别获取保存的 arr1 和 arr2 数组。