Python数据分析NumPy和pandas(六、NumPy数组计算和运用)

一、生成伪随机数

numpy.random模块补充了python内置的random模块,其中包含从多种概率分布中高效生成样本值的整个数组的函数。例如,您可以使用 numpy.random.standard_normal 从标准正态分布中获取 4 × 4 样本数组:

import numpy as np

samples = np.random.standard_normal(size=(4, 4))
print(samples)

输出:

[[ 0.91440739 -1.09376135 -0.12968644  0.43102929]
 [-1.60296277 -0.48098121 -0.084185   -1.339922  ]
 [ 1.06562732 -0.22993078  0.09371422 -0.72325676]
 [-0.6425271  -0.44327938 -0.98561131 -2.6658581 ]]

其中numpy的random模块的standard_normal函数传递了一个参数size,指定了生成数组的形状。

Python 的内置 random 模块一次只生成一个值。从以下这个测试中可以看出,numpy.random 生成非常大的样本的速度要比Python内置的random快一个数量级以上。

上图中可以看出,用python自带的random生成标准正态分布1000000万个伪随机数样本耗时868ms,而使用numpy的random模块生成相同量的数据耗时31.1ms,这个要快一个数量级以上。

注意:这里我用了一个新插件,我再vs code中安装了jupyter交互式笔记本。

二、NumPy的random的默认推荐的构造函数default_rng()

np.random.default是NumPy中的一个类,用于生成高质量的随机数序列,适用于模拟和实验等领域。‌ 该功能在NumPy 1.17版本中引入,通过调用np.random.default_rng()函数创建一个随机数生成器对象。这个对象可以实现各种随机数生成函数,生成不同类型的随机数,如整数、浮点数、布尔值等‌。以下通过np.random.default_rng()创建一个随机数生成器实例:

import numpy as np

rng = np.random.default_rng()

创建实例后,可以通过调用实例rng的方法生成所需的随机数。例如:

  • 生成一个随机浮点数:rng.random()
  • 生成一个指定大小且值在指定范围内的随机整数二维数组:rng.integers(low, high=None, size=None, dtype=np.int64)
  • 生成具有特定平均值和方差的随机数数组:rng.standard_normal(shape=None)
  • 生成布尔值数组:rng.choice(a, size=None, replace=True, p=None)
  • 生成非负随机整数:rng.noncentral_chisquare(df, nonc, size=None, dtype=np.float64)

此外,还可以设置种子值以确保结果的可重复性‌。例如:

import numpy as np

rng = np.random.default_rng(seed=36)
data = rng.standard_normal((2, 3))
print(data)

以上代码无论运行几次,由于设置了相同的种子,输出结果都相同,我的环境运行结果如下:

[[-1.10980586 -0.28793601 -0.26313362]
 [-0.23681749  1.11880171  0.1331096 ]]

看下rng的类型type(rng)  输出  <class 'numpy.random._generator.Generator'>

三、NumPy随机数生成器的常用方法

  

四、通用函数:快速元素级数组函数

1. np.sqrt()求每个元素的平方根

arr = np.arange(10)  # 输出 [0 1 2 3 4 5 6 7 8 9]

np.sqrt(arr)  # 输出 [0. , 1. , 1.4142, 1.7321, 2. , 2.2361, 2.4495, 2.6458, 2.8284, 3. ]

2. np.exp()对数组中的每个元素进行以e为底的指数运算

arr = np.arange(10)  # 输出 [0 1 2 3 4 5 6 7 8 9]

np.exp(arr) 

# 输出 [ 1. , 2.7183, 7.3891, 20.0855, 54.5982, 148.4132, 403.4288, 1096.6332, 2980.958 , 8103.0839]

3. 元素级数组函数列表如下

  

  

猜你喜欢

转载自blog.csdn.net/FreedomLeo1/article/details/142912458