在了解Numpy 基本概念后使用 Numpy,可以很方便地执行数组运算、逻辑运算、傅里叶变换和图形图像操作。Numpy 数组的运算效率优于 Python 的标准 List 类型。而且代码中使用 Numpy 可以省去很多烦琐的处理语句,代码更为简洁。
Numpy 数组属性
1. 常用术语
- 轴(Axis):每个线性数组称为一个轴,轴即数组的维度(Dimensions)。
- 秩(Rank):秩描述 Numpy 数组的维数,即轴的数量。
例如:[0, 1, 2] 是一个一维数组,只有一个轴,其秩为 1,轴长度为 3; [[0, 1, 2], [3, 4, 5]]是一个二维数组,数组的秩为 2,具有两个轴,其中第一个轴(维度)的长度为 2,第二个轴(维度)的长度为 3。
在使用的时候可以声明 axis
,如果 axis=0
,表示按第 0 轴方向操作,即对每列进行操作;如果 axis=1
,表示按第 1 轴方向操作,即对每列进行操作。
import numpy as np
# 使用 axis 参数设置当前轴
arr = np.array([[0, 1, 2], [3, 4, 5]])
print(arr)
print(arr.sum(axis=0)) # 进行垂直(列)方向的求和计算
print(arr.sum(axis=1)) # 进行沿行方向的计算
运行结果如下:
2. 基本属性
Numpy 的 ndarray 数据具有相应的属性,可以获得数组的信息。
属性 | 说明 |
---|---|
ndarray.ndim | 秩,轴的数量 |
ndarray.shape | 数组的维度 |
ndarray.size | 数组元素的总个数 |
ndarray.dtype | 数组元素类型 |
ndarray.itemsize | 每个元素的大小(B) |
ndarray.data | 实际数组元素 |
ndarray 属性4个必记参数:
- ndim:维度
- shape:形状(各维度的长度)
- size:总长度
- dtype:元素类型
创建 属性 如何访问 如何计算
在 Numpy 中 ndarray.ndim
返回这个数组的维数,等于秩。reshape()
函数可以将数组变形重构,调整数组各维度的大小,格式为:numpy.reshape(a, newshape, order='C')
。
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7])
# 显示数组 arr 的 rank
print(f"秩为:{arr.ndim}")
arr_3D = arr.reshape(2, 2, 2)
print(arr_3D)
print(f"秩为:{arr_3D.ndim}")
显示结果如下:
其它示例:
import numpy as np
arr = np.array([[0, 1, 2], [3, 4, 5]])
# 显示数组 arr 的维度
print(arr.shape)
# 调整数组大小
arr.shape = (3, 2)
其他创建数组的方式
ndarray 数组可以使用
array()
函数来构造。此外,还有其他几种方式可以用来创建特殊的数组。
1. numpy.empty()
可以创建一个指定形状,数据类型的空数组。这个数字没有经过初始化,其内容为空。
格式:numpy.empty(shape, dtype = float, order = 'C')
。
创建空数组的参数:
参数 | 描述 |
---|---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | 有 “C” 和 “F” 两个选项,分别代表行优先和列优先,表示在计算机内存中存储元素的顺序 |
示例:
import numpy as np
arr = np.empty([3, 2], dtype = int)
运行后得到的数组元素值是不确定的,因为所有空间未初始化。
2. numpy.zeros()
创建全 0 填充的数组,此时可以使用 Numpy 的
zeros()
函数。
格式:numpy.zeros(shape, dtype = float, order = 'C')
。
参数说明:
参数 | 描述 |
---|---|
shape | 数组形状 |
dtype | 数据类型,可选 |
order | “C” 用于 ‘C’ 风格 —— 行为主的数组,或者 ‘F’ 用于 FORTRAN 风格 —— 列为主的数组 |
示例:
import numpy as np
# 默认为浮点数
arr = np.zeros(5)
# 设置类型为整数
Int_arr = np.zeros((5, ), dtype = np.int)
# 自定义类型
Self_arr = np.zeros((2, 2), dtype = [('x', 'i4'), ('y', 'i4')])
3. numpy.ones()
创建以 1 填充的数组,此时可以使用 Numpy 的
ones()
函数。
格式:numpy.ones(shape, dtype = None, order = 'C')
,参数与上类似。
示例:
import numpy as np
# 默认为浮点数
arr = np.ones(5)
# 自定义类型
Self_arr = np.ones([2, 2], dtype = int)
4. numpy.full()
创建一个根据指定 shape 和 type,并用
fill_value
填充的新数组。
格式:numpy.full(shape, fill_value, dtype=None, order='C')
,参数与上类似。
示例:
import numpy as np
# 创建一个 3 × 3 的元素全是 6 的数组
arr_6 = np.full(shape=(3, 2), fill_value = 6)
5. numpy.eye()
返回一个数组,其中对角线为 1,零点为 0。
格式:numpy.eye(N, M=None, k=0, dtype=float)
。
参数说明:
参数 | 描述 |
---|---|
N | 输出中的行数 |
M | 输出中的列数,可选。如果无,默认为空 |
k | 可选,对角线的索引:0(默认值)指的是主对角线,正值指的是上对角线,负值指的是下对角线。 |
示例:
import numpy as np
arr = np.eye(N=5, k=1)
运行结果如下:
6. numpy.linspace()
生成一个指定大小,指定数据区间的均匀分布序列。
格式:numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
。
参数说明:
参数 | 描述 |
---|---|
start | 序列中数据的起始值 |
end | 序列中数据的结束值 |
num | 生成的样本数;其值默认为 50 |
endpoint | 取 True 时,序列包含最大值 end;否则不包含;其值默认为 True |
retstep | 该值取 True 时,生成的序列中显示间距;反正不显示;其值默认为 False |
7. numpy.arange()
在给定间隔内返回均匀间隔的值。
格式:numpy.arange(start, stop, step, dtype=None)
。
参数 | 描述 |
---|---|
start | 开始位置,数字,可选项,默认起始值为 0 |
stop | 停止位置,数字 |
step | 步长,数字,可选项, 默认步长为 1,如果指定了 step,则还必须给出 start |
8. 随机函数创建数组
Numpy 还在子模块中提供了随机函数,常见的随机函数见如下:
函数 | 描述 |
---|---|
rand(d0, ……, dn) | 随机产生指定维度的浮点数组 |
randint(low[, high, size, dtype]) | 随机产生 [low, high] 的整数 |
random([size]) | 随机产生 [0.0, 1.0) 的浮点数 |
uniform(start, end, size) | 从 [start, end) 均匀分布的数据中随机抽取一组浮点数 |
normal(loc, scale, size) | 基于给定的均值和方差随机产生一组正态分布* 的浮点数 |
* 正态分布(Normal Distribution):又称高斯分布,是许多统计方法的理论基础。分布图型左右对称。正态分布的参数包括均值和标准差。同样的均值情况下,标准差越大,曲线越平阔;标准差越小,曲线越狭窄。使用 numpy.random.normal() 函数可以生成服从正态分布的数据。
示例:
import numpy as np
# 生成一个 2 × 3 的随机浮点数组
np.random.rand(2,3)
# 生成一个 2 × 2 的 10 以内的随机整数数组
np.random.randint(0, 10, (2, 2))
# 生成一个 2 × 3 的 [1, 2) 的随机浮点数组
np.random.uniform(1, 2, [2, 3])
(1)- numpy.random.randint()
返回一个随机整型数,范围从低(包括)到高(不包括),即 [low, high)。如果没有写参数 high 的值,则返回 [0,low) 的值。
格式:numpy.random.randint(low, high=None, size=None, dtype="l")
。
参数说明:
参数 | 描述 |
---|---|
low | 为最小值,生成的数值最低要大于等于 low |
high | 可选,使用这个值,则生成的数值在 [low, high) 区间 |
size | 可选,为数组维度大小,同 shape |
示例:
import numpy as np
# 随机生成一个 5 × 5 的从 0~100 的随机数组
np.random.randint(0, 100, size=(5, 5))
# 生成0到1的随机数,左闭右开
np.random.random(size=None)
(2)- 正态分布函数
- np.random.randn(d0, ……, dn) 标准正态分布
- np.random.normal() 普通正态分布
(3)- 生成一组随机索引
- np.random.permutation()
import numpy as np # # 生成 5 个随机索引 np.random.permutation(5)
Numpy 的强大远不止于此,它是 Python 中的一个常用数值计算库,它为 Python 提供了大量可以高效处理多维数组和矩阵的函数和方法。NumPy 数组操作,用户可以轻松地进行各种数学、科学和工程计算。如果您想要进一步了解 NumPy 的功能和应用,可以查阅相关资料,并尝试自己动手实践一些例题。
点个赞