NumPy
是 Python 的一个开源数值计算扩展库,用于高性能的科学计算和数据分析。它提供了一个强大的N维数组对象ndarray
,以及用于对这些数组进行操作的各种函数。
通过pip
安装:
pip install numpy
创建数组
从列表创建
numpy.array
可以通过多种方式创建,最直接的方式是使用np.array
函数,将Python列表或元组转换为ndarray
对象。
import numpy as np
# 从列表创建数组
arr_from_list = np.array([1, 2, 3, 4, 5])
print(arr_from_list)
# 输出:[1 2 3 4 5]
# 从嵌套列表创建二维数组
arr_from_nested_list = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_from_nested_list)
# 输出:
# [[1 2 3]
# [4 5 6]]
在创建numpy.array
时,可以通过dtype
参数指定数组元素的数据类型。NumPy
提供了丰富的数据类型,包括int
、float
、complex
、bool
、object
等。
arr_int = np.array([1, 2, 3], dtype=np.int32)
arr_float = np.array([1, 2, 3], dtype=np.float64)
print("整型数组:", arr_int.dtype)
print("浮点型数组:", arr_float.dtype)
使用内置函数创建
NumPy
提供了多个内置函数来创建特定内容的数组。
np.zeros
和np.ones
np.zeros
和np.ones
是NumPy库中的两个非常基础且常用的函数,它们分别用于创建元素全部为0和全部为1的数组。
np.zeros
np.zeros
函数用于创建一个给定形状和类型的新数组,其中的元素全部初始化为0。
numpy.zeros(shape, dtype=float, order='C')
shape
:整数或整数元组,指定数组的形状。dtype
:数据类型,可选。默认为float
。order
:{'C', 'F'},可选。指定数组在内存中的存储顺序。'C'意味着按行C风格顺序存储,'F'意味着按列Fortran风格顺序存储。默认是'C'。
import numpy as np
# 创建一个形状为(3, 4)的全0数组
arr_zeros = np.zeros((3, 4))
print(arr_zeros)
np.ones
np.ones
函数用于创建一个给定形状和类型的新数组,其中的元素全部初始化为1。
numpy.ones(shape, dtype=float, order='C')
参数与np.zeros
相同。
import numpy as np
# 创建一个形状为(2, 3)的全1数组
arr_ones = np.ones((2, 3))
print(arr_ones)
np.arange
创建一系列数值的数组。
# 创建一个从0到9的数组
range_arr = np.arange(10)
print(range_arr)
# 创建一个从10到19的间隔为2的数组
range_step_arr = np.arange(10, 20, 2)
print(range_step_arr)
np.linspace
用于生成一个等差数列。这个函数非常适合在需要生成特定范围内的固定大小样本时使用,比如在绘图、科学计算等场景下非常有用。linspace()
函数能够确保开始点和结束点被包括在内。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
参数解释
- start: 序列的起始值。
- stop: 序列的终止值,除非
endpoint
设置为False
,否则此值会包括在数列中。 - num: 要生成的等间隔样本数量,默认为50。
- endpoint: 布尔值,如果为
True
,则数列包含stop
值;如果为False
,则不包含,stop
是数列的上限。 - retstep: 布尔值,如果为
True
,则返回样本之间的步长以及样本数组。 - dtype: 数组的类型。如果未给出,则将从其他输入参数中推断数据类型。
- axis: 返回的数组中,样本是沿着指定轴排列的。
下面是使用numpy.linspace()
函数的一些基本示例。
生成简单的等差数列
import numpy as np
# 生成从0到10的10个数字
arr = np.linspace(0, 10, 10)
print(arr)
不包含终止值的数列
# 生成从0到10的10个数字,但不包括10
arr = np.linspace(0, 10, 10, endpoint=False)
print(arr)
获取步长
如果你需要了解数列中各个点之间的间隔大小,可以设置retstep=True
。
# 生成数列并返回步长
arr, step = np.linspace(0, 10, 10, retstep=True)
print("Array:", arr)
print("Step size:", step)
在绘图中的应用
linspace()
在绘图和数学计算中特别有用。比如,当你需要绘制数学函数图像时,你可能需要一个密集的点集来代表X轴上的值,以便函数图像看起来平滑。
import matplotlib.pyplot as plt
x = np.linspace(0, 4*np.pi, 100) # 生成0到4π之间的100个点
y = np.sin(x) # 计算每个点的正弦值
plt.plot(x, y)
plt.show()
np.full
用于创建一个给定形状和类型的新数组,其特点是可以指定数组中每个元素的填充值。这使得np.full
在需要初始化一个具有特定大小和初始值的数组时非常有用。
np.full
函数的基本语法如下:
numpy.full(shape, fill_value, dtype=None, order='C')
shape
:整数或整数元组,用于指定新数组的形状。fill_value
:标量值,用于填充数组中的每个元素。dtype
:数据类型,可选。如果未指定,则自动推断fill_value
的数据类型。order
:{'C', 'F'},指定数组在内存中的存储顺序。'C'意味着按行C风格顺序存储,而'F'意味着按列Fortran风格顺序存储。默认是'C'。
示例1:基础示例
import numpy as np
# 创建一个形状为(3, 4)且填充值为5的数组
arr_full = np.full((3, 4), 5)
print(arr_full)
# 输出:
# [[5 5 5 5]
# [5 5 5 5]
# [5 5 5 5]]
这个示例创建了一个3行4列,所有元素都被填充为5的数组。
示例2:指定数据类型
import numpy as np
# 创建一个形状为(2, 2)、填充值为7.0、数据类型为float的数组
arr_full_float = np.full((2, 2), 7.0, dtype=np.float32)
print(arr_full_float)
# 输出:
# [[7. 7.]
# [7. 7.]]
在这个示例中,通过指定dtype
为np.float32
,创建了一个所有元素都是7.0的浮点数组。
示例3:使用
np.full_like
np.full_like
函数可以基于现有的数组创建一个新数组,新数组具有相同的形状和类型,但所有元素的值都被设置为指定的填充值。
import numpy as np
# 创建一个初始数组
arr_initial = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)
# 使用np.full_like创建一个形状相同但填充值为-1的数组
arr_full_like = np.full_like(arr_initial, -1)
print(arr_full_like)
# 输出:
# [[-1 -1 -1]
# [-1 -1 -1]]
特殊数组
np.eye
创建一个单位矩阵。
# 创建一个3x3的单位矩阵
eye_arr = np.eye(3)
print(eye_arr)
np.empty
创建一个未初始化的数组。这种方式创建的数组内容是不确定的,取决于内存的状态。
# 创建一个形状为(2,2)的未初始化数组
empty_arr = np.empty((2, 2))
print(empty_arr)