【NumPy】专题学习
参考:NumPy Ndarray 对象 | 菜鸟教程 (runoob.com)
深入了解NumPy中的随机数模块:numpy.random - 知乎 (zhihu.com)
NumPy Ndarray 对象
NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
ndarray 对象是用于存放同类型元素的多维数组。
创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数说明:
名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
import numpy as np
a = np.array([[1, 2], [3, 4]])
print (a)
NumPy 的数组中比较重要 ndarray 对象属性有:
属性 | 说明 |
---|---|
ndarray.ndim | 数组的秩(rank),即数组的维度数量或轴的数量。 |
ndarray.shape | 数组的维度,表示数组在每个轴上的大小。对于二维数组(矩阵),表示其行数和列数。 |
ndarray.size | 数组中元素的总个数,等于 ndarray.shape 中各个轴上大小的乘积。 |
ndarray.dtype | 数组中元素的数据类型。 |
ndarray.itemsize | 数组中每个元素的大小,以字节为单位。 |
ndarray.flags | 包含有关内存布局的信息,如是否为 C 或 Fortran 连续存储,是否为只读等。 |
ndarray.real | 数组中每个元素的实部(如果元素类型为复数)。 |
ndarray.imag | 数组中每个元素的虚部(如果元素类型为复数)。 |
ndarray.data | 实际存储数组元素的缓冲区,一般通过索引访问元素,不直接使用该属性。 |
创建数组
numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
numpy.empty(shape, dtype = float, order = 'C')
numpy.zeros创建指定大小的数组,数组元素以 0 来填充
numpy.ones创建指定形状的数组,数组元素以 1 来填充
numpy.zeros_like 用于创建一个与给定数组具有相同形状的数组,数组元素以 0 来填充。(区别在于:numpy.zeros 可以直接指定要创建的数组的形状,而 numpy.zeros_like 则是创建一个与给定数组具有相同形状的数组。)
类似的有numpy.ones_like。
还可以用arange函数生成数组:
numpy.arange(start, stop, step, dtype = None)
值在半开区间 [开始,停止]内生成(换句话说,包括开始但不包括停止的区间),返回的是 ndarray。
随机数创建
基本的随机数生成函数有三个,也就是rand(),randn(),以及randint()
numpy.random.rand()
- 生成均匀分布的在[0, 1)内的随机数
参数:
numpy.random.rand(d0, d1, ..., dn)
接受多个整数参数,每个参数代表生成随机数的维度。可以使用逗号分隔的整数来指定多维数组的形状。
import numpy as np# 生成一个[0, 1)范围内的随机浮点数
rand_num = np.random.rand()
print(rand_num)# 生成一个3x3的二维数组,包含[0, 1)范围内的随机浮点数
rand_array = np.random.rand(3, 3)
print(rand_array)
numpy.random.randn()
- 生成标准正态分布的随机数
参数:
numpy.random.randn(d0, d1, ..., dn)
同样接受多个整数参数,用于指定生成随机数的维度。
import numpy as np# 生成一个标准正态分布的随机浮点数
rand_num = np.random.randn()
print(rand_num)# 生成一个3x3的二维数组,包含标准正态分布的随机浮点数
rand_array = np.random.randn(3, 3)
print(rand_array)
numpy.random.randint()
- 生成整数随机数
- 参数:
numpy.random.randint(low, high, size=None, dtype=int)
其中:
low
是生成的随机数的下界(包含在内)。high
是生成的随机数的上界(不包含在内)。size
是生成随机数的形状,可以是整数或元组。如果不提供,默认生成一个随机整数。dtype
是生成的随机数的数据类型,默认为整数。
import numpy as np# 生成一个[0, 10)范围内的整数随机数
rand_int = np.random.randint(0, 10)
print(rand_int)# 生成一个1x5的一维数组,包含[0, 10)范围内的整数随机数
rand_array = np.random.randint(0, 10, size=(1, 5))
print(rand_array)
概率分布生成函数
正态分布(Normal Distribution)
- 生成方法: 使用
numpy.random.normal()
函数生成。需要指定均值(loc
)和标准差(scale
)。- 特点: 正态分布是一种对称的、钟形曲线分布,均值、中位数和众数相等。它具有良好的数学性质,广泛用于自然现象、社会科学、工程等领域的建模。
- 常见场景: 金融领域的资产价格、身高和体重分布、测量误差分布等。
import numpy as np
import matplotlib.pyplot as plt# 生成1000个均值为0、标准差为1的正态分布随机数
data = np.random.normal(0, 1, 10000)# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.6, color='g')
plt.title("Normal Distribution")
plt.show()
还有均匀分布(Uniform Distribution)、泊松分布(Poisson Distribution)、指数分布(Exponential Distribution)、二项分布(Binomial Distribution)等等,现用现查吧。深入了解NumPy中的随机数模块:numpy.random - 知乎 (zhihu.com)
构建等差、等比数组
numpy.linspace()
numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
参数 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果endpoint 为true ,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 true 时,数列中包含stop 值,反之不包含,默认是True。 |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示。 |
dtype | ndarray 的数据类型 |
import numpy as np
a = np.linspace(1,10,10)
print(a)
numpy.logspace()
numpy.logspace 函数用于创建一个于等比数列。格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
base 参数意思是取对数的时候 log 的下标。
参数 | 描述 |
---|---|
start | 序列的起始值为:base ** start |
stop | 序列的终止值为:base ** stop。如果endpoint 为true ,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为50 |
endpoint | 该值为 true 时,数列中中包含stop 值,反之不包含,默认是True。 |
base | 对数 log 的底数。 |
dtype | ndarray 的数据类型 |
import numpy as np
a = np.logspace(0,9,10,base=2)
print (a)
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
数组拼接
numpy提供了numpy.concatenate((a1,a2,...), axis=0)函数。能够一次完成多个数组的拼接。其中a1,a2,...是数组类型的参数
concatenate(a_tuple, axis=0, out=None)
"""
参数说明:
a_tuple:对需要合并的数组用元组的形式给出
axis: 沿指定的轴进行拼接,默认0,即第一个轴
"""
>>> import numpy as np
>>> ar1 = np.array([[1,2,3], [4,5,6]])
>>> ar2 = np.array([[7,8,9], [11,12,13]])
>>> ar1
array([[1, 2, 3],[4, 5, 6]])
>>> ar2
array([[ 7, 8, 9],[11, 12, 13]])>>> np.concatenate((ar1, ar2)) # 这里的第一轴(axis 0)是行方向
array([[ 1, 2, 3],[ 4, 5, 6],[ 7, 8, 9],[11, 12, 13]])>>> np.concatenate((ar1, ar2),axis=1) # 这里沿第二个轴,即列方向进行拼接
array([[ 1, 2, 3, 7, 8, 9],[ 4, 5, 6, 11, 12, 13]])
参考:Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)_python两个数组拼接-CSDN博客