【Numpy】(2)numpy对象和random模块
numpy.array对象
numpy.array
对象是 NumPy 库的核心,它提供了一种高效的方式来存储和操作同质数据类型的多维数组。每个 numpy.array
对象都有一系列的属性,这些属性提供了关于数组的重要信息。理解这些属性对于有效地使用 NumPy 和进行数据分析是非常关键的。以下是 numpy.array
对象的一些最重要的属性的详细介绍:
ndarray.ndim
ndim
属性表示数组的维数,或者说数组轴的数量。例如,一个一维数组的ndim
值为1,二维数组的ndim
值为2,以此类推。
ndarray.shape
shape
属性是一个表示数组在每个维度上大小的元组。对于一个二维数组(矩阵),其形状将表示为(行数, 列数)
。
ndarray.size
size
属性表示数组中元素的总数量。这等于shape
属性中各维度大小的乘积。
ndarray.dtype
dtype
属性表示数组中元素的数据类型,如float64
(64位浮点数)、int32
(32位整数)、bool
(布尔值)等。
ndarray.itemsize
itemsize
属性表示数组中每个元素的大小(以字节为单位)。例如,数据类型为float64
的数组中每个元素的itemsize
为8,因为一个float64
占用8字节。
ndarray.data
data
属性是一个指向数组实际数据的缓冲区的指针。通常,我们不直接使用这个属性,因为我们可以通过索引方法直接访问数组中的元素。
使用示例
下面是一个简单的例子,演示如何创建一个 NumPy 数组并使用这些属性:
import numpy as np
# 创建一个二维数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
# 打印数组的属性
print("Array dimensions:", arr.ndim)
print("Shape of array:", arr.shape)
print("Size of array:", arr.size)
print("Data type of array elements:", arr.dtype)
print("Item size of array elements (bytes):", arr.itemsize)
np.random
np.random
模块是 NumPy 库的一部分,提供了用于生成随机数的功能。这个模块包含了一系列函数,用于生成不同类型的随机数据,如单个数、数组、根据特定分布生成的随机数等。以下是 np.random
模块的详细介绍,包括常用函数和使用示例。
随机数生成
生成单个随机数
np.random.rand()
: 生成一个[0, 1)区间内的均匀分布的随机数。np.random.randn()
: 生成一个标准正态分布(均值为0,方差为1)的随机数。
生成随机数组
np.random.rand(d0, d1, ..., dn)
: 生成一个给定形状的数组,数组中的元素是[0, 1)区间内的均匀分布的随机数。np.random.randn(d0, d1, ..., dn)
: 生成一个给定形状的数组,数组中的元素是标准正态分布的随机数。np.random.randint(low, high=None, size=None, dtype='l')
: 生成一个随机整数或整数数组,范围是[low, high),如果high=None
,则范围是[0, low)。
随机种子
NumPy的随机数功能是基于伪随机数生成器的,这意味着它们是通过算法在确定性的基础上生成的,看起来像是随机的。设置相同的种子值将会产生相同的随机数序列。
np.random.seed(seed=None)
: 设置随机数生成的种子。指定种子后,随机数生成的序列是可重复的。
从特定分布生成随机数
np.random.normal(loc=0.0, scale=1.0, size=None)
: 从正态分布中抽取随机数。np.random.uniform(low=0.0, high=1.0, size=None)
: 从均匀分布中抽取随机数。np.random.binomial(n, p, size=None)
: 从二项分布中抽取随机数。np.random.poisson(lam=1.0, size=None)
: 从泊松分布中抽取随机数。np.random.exponential(scale=1.0, size=None)
: 从指数分布中抽取随机数。
随机抽样
np.random.choice(a, size=None, replace=True, p=None)
: 从给定的一维数组中随机抽取元素。replace
控制是否可以重复抽取同一个元素,p
指定各元素被抽取的概率。
示例代码
import numpy as np
# 设置随机种子
np.random.seed(42)
# 生成随机数组
arr_uniform = np.random.rand(2, 3) # 均匀分布
arr_normal = np.random.randn(2, 3) # 标准正态分布
arr_int = np.random.randint(1, 10, size=(2, 3)) # 随机整数
print("Uniform distributed array:\n", arr_uniform)
print("\nNormally distributed array:\n", arr_normal)
print("\nRandom integer array:\n", arr_int)
# 从正态分布生成随机数
mean = 0
std = 1
size = 5
normal_samples = np.random.normal(mean, std, size)
print("\nNormal distribution samples:", normal_samples)
# 随机抽样
choices = np.random.choice(['a', 'b', 'c', 'd'], size=10, replace=True)
print("\nRandom choices:", choices)