np.linspace()
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
是 NumPy 库中用于生成等间隔数值序列的函数。这个函数在数值计算和数据可视化时非常有用,特别是在需要生成一组具有相同间隔的数值时,例如绘图、采样点等。
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明:
- start: 序列的起始值。
- stop: 序列的结束值。
- num: 生成的样本数量,默认是 50。
- endpoint: 结束值是否包含在序列中,默认为 True。如果设为 False,则停止点不包含在内。
- retstep: 如果为 True,则返回样本间距 (step),默认为 False。
- dtype: 输出数组的数据类型。
注意事项💎
- 左闭右闭区间:左右两个值都能取到
- 等间隔数,不是随机数
- 设置参数num,来规定间隔大小。设置的数字个数(num)越多,间隔越小
- 可以生成负数,小数
linspace直接生成一维数组,不是列表
重塑数组形状--reshape方法
练习1:先用linspace生成一维数组,形状(1,6);再将这个一维数组转换为形状为(2,3)的数组。
# 生成从 0 到 1 的 6 个等间隔的数值
arr = np.linspace(0, 1, 6)
# 重新调整形状为 (2, 3)
reshaped_arr = arr.reshape((2, 3))
print(reshaped_arr)
输出

reshape((2, 3))将一维数组转换为形状为 (2, 3) 的二维数组。- 使用
reshape时,要确保原数组的元素总数和目标形状的元素总数一致。例子中,我们生成了 6 个元素,正好可以重塑为 (2, 3) 的形状。 -
元素数量一致:要确保在使用
reshape()时,新形状的元素总数量与原数组的元素总数量一致。例如,原数组有 12 个元素,新的形状可以是 (3, 4)、(4, 3)、(6, 2) 等。 -
共享内存:
reshape()返回的数组与原数组共享数据。这意味着如果你修改其中一个数组的元素,另一个数组也会受到影响。
练习2:你还可以使用 -1 作为形状的一个维度,让 NumPy 自动计算该维度的大小。例如
import numpy as np
# 创建一个包含 12 个元素的数组
arr = np.arange(12)
print("Original array:")
print(arr)
# 使用 -1 自动推断第二个维度
reshaped_arr_auto = arr.reshape((4, -1))
print("\nReshaped array (4x3) using -1:")
print(reshaped_arr_auto)
输出:
Reshaped array (4x3) using -1:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
numpy.arange([start], stop[, step], dtype=None)
np.arange()
np.arange() 是 NumPy 库中的一个函数,用于创建一个一维数组,其元素是一个指定范围内的等差数列。它的使用方法类似于 Python 内置的 range() 函数,但返回的是一个 NumPy 数组,而不仅仅是一个迭代器。
- start(可选):序列的起始值,默认值为 0。
- stop:序列的结束值(不包括在内)。
- step(可选):序列中元素的间隔,默认值为 1。
- dtype(可选):返回数组的数据类型,如果未指定,则根据输入数据推断。
注意:
-
结束值不包含在内:
stop参数指定的值不会出现在生成的数组中。 -
类型自动推断: 如果没有指定 dtype,NumPy 会根据输入的参数来推断数据类型。
-
步长可以是负数:如果
start大于stop,你可以使用负步长来创建递减的数组。例如:np.arange(10, 0, -1)会生成一个包含 10 到 1 的数组。 -
生成一系列递增/减数的数组。
-
生成的数可能是小数,所以
示例:
import numpy as np
# 创建一个从 0 到 9 的整数数组
arr1 = np.arange(10)
print("Array from 0 to 9:")
print(arr1)
#输出
Array from 0 to 9:
[0 1 2 3 4 5 6 7 8 9]
range()
range() 是一个内置函数,用于生成一个整数序列。可以接受一个、两个或三个参数:
range(stop): 生成从 0 到 stop-1 的整数。
range(start, stop): 生成从 start 到 stop-1 的整数。
range(start, stop, step): 生成从 start 到 stop-1,步长为 step 的整数。
注意事项💎
- 无np.range()用法,只能是for循环方式
-
for i in range(-4,4) - 左闭右开:只能取到左边端点值,不能取到右边端点值
- 只能生成整数(正整数,负整数),因为这三个参数stop,start,step只能是整数。如果不是整数会报错。
for i in range(-8.5,4,2):
print(i) #TypeError: 'float' object cannot be interpreted as an integer
- 如果是两个参数,默认第一个为起点,第二个为终点,步长为默认值1。所以也和np.linspace()一样,是等间隔数
len()
len() 是 Python 中的一个内置函数,用于返回对象(如字符串、列表、元组、字典)中元素的数量。
字符串——返回字符串的字符数:
#字符串
s = "Hello, World!"
print(len(s)) # 输出: 13
列表——返回列表中元素的数量:
my_list = [1, 2, 3, 4, 5]
print(len(my_list)) # 输出: 5
注意事项:
len()函数本身只能返回一个对象的元素个数,因此在处理二维数组时,它可以返回行的数量,但不能直接返回列的数量。- 使用对象不只是列表,还有字符串、元组、字典的长度。
plt.plot()
注意:
- 无法添加标题和颜色,需使用其他函数。在
matplotlib中,plt.plot()函数本身并不支持直接添加标题和 colorbar。通常这些元素是分别通过plt.title()和plt.colorbar()来添加的。
plt.xlabel()
给x轴添加物理名称及单位,设置x代表哪个物理值(时间t或其他)
语法举例:
# plot timeseries for wave gauge 0
nsmp = 500
plt.plot(t[:nsmp], eta[:nsmp, 0])
plt.xlabel('t [s]')
plt.ylabel('eta [m]')
plt.show()
生成图例:

plt.title()
给图表添加标题。标题名称用''括起来。
语法举例
# plot timeseries for wave gauge 0
nsmp = 500
plt.plot(t[:nsmp], eta[:nsmp, 0])
plt.xlabel('t [s]')
plt.ylabel('eta [m]')
plt.title('Wave Guage 0 Time Series')
plt.show()
图例:

plt.colorbar()
plt.subplot()
新知识
pcolormesh
pcolormesh 是 Matplotlib 中用于绘制二维数据的一个函数。它通常用于创建热图或伪彩图,适合展示网格数据。与其他绘图函数相比,pcolormesh() 更加高效,特别适合于绘制大数据集。
基本语法
matplotlib.pyplot.pcolormesh(X, Y, C, **kwargs)
- X:一维数组或二维数组,表示数据的 x 坐标。
- Y:一维数组或二维数组,表示数据的 y 坐标。
- C:二维数组,表示 z 值或颜色映射值,通常是与 X 和 Y 形状相对应的数值。
- kwargs:其他可选参数,比如
cmap和shading。一般有两个参数进行设置:shading=’‘和cmap=’viridis‘ - shading='':shading:设定填充区域的计算方式。常用的选项是:
'auto':自动选择。'flat':使用网格角点的值来填充矩形。'nearest':使用最近邻插值。
练习1:
import numpy as np
import matplotlib.pyplot as plt
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2)) # 示例数据
# 绘制伪彩色图
plt.figure(figsize=(8, 6))
pcm = plt.pcolormesh(X, Y, Z, shading='auto', cmap='viridis')
plt.colorbar(pcm, label='Z values') # 添加颜色条
plt.title('Pcolormesh Plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.show()
np.meshgrid
功能:NumPy 库中的一个函数,主要用于生成一个坐标网格。它将两个一维数组x,y(通常是代表横轴和纵轴的坐标)转换为两个二维数组X,Y。在生成的坐标网格上我们可以进行矩阵运算和绘图。
在进行二维数据可视化(如绘制热图)或计算某个函数在二维空间中的值时,meshgrid 对于生成齐全的坐标矩阵十分重要。
语法:
X,Y = np.meshgrid(x,y)
plt.contourf
与contour的区别:
contour:仅绘制等高线(线条),没有填充。contourf:填充等高线区域,用不同颜色来表示不同 Z 值的范围。
图形显示:
#contour示例
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2
plt.contour(X, Y, Z, levels=10, cmap='viridis')
plt.title("Contour")
plt.colorbar(label='Z values')
plt.show()
#contourf示例
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2
plt.contourf(X, Y, Z, levels=10, cmap='viridis')
plt.title("Filled Contour")
plt.colorbar(label='Z values')
plt.show()
结果对比:


plt.contour
是 Matplotlib 库中的一个函数,用于绘制轮廓线图(Contour Plot)。轮廓线图通过连接具有相同值的点(等高线)来表示三维数据的二维投影,常用于表示函数的离散值,如高度、温度等。
功能:
- 可视化多维数据:非常适合展示函数在平面上的变化情况。
- 智能分层:可以选择轮廓线的数量和分层方式。
语法:
plt.contour(X, Y, Z, levels=None, cmap='viridis', **kwargs)
X,Y:表示坐标网格的二维数组,通常通过meshgrid函数生成。Z:表示在每个(X, Y)点对应的函数值的二维数组。levels:可选,指定绘制的轮廓线数量或值。如果为None,Matplotlib 会自动选择合适的值。**kwargs:其他可选参数,用于自定义绘图样式(例如颜色、线型等)。
练习1
import numpy as np
import matplotlib.pyplot as plt
# 定义横坐标和纵坐标的范围
x = np.linspace(-5, 5, 100) # 从 -5 到 5 生成 100 个点
y = np.linspace(-5, 5, 100) # 从 -5 到 5 生成 100 个点
# 生成坐标网格
X, Y = np.meshgrid(x, y)
# 计算一个函数的值,例如 Z = X^2 + Y^2
Z = X**2 + Y**2
# 绘制轮廓图
contour = plt.contour(X, Y, Z, levels=20, cmap='viridis')
# 添加色条
plt.colorbar(contour, label='Z value')
# 添加标题和标签
plt.title('Contour Plot')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 显示图形
plt.show()
结果显示:

plt.colorbar
是 Matplotlib 库中的一个函数,用于添加颜色条(Color Bar)到绘图上。颜色条可以帮助直观地显示颜色与数值之间的对应关系,通常在热图、轮廓图和其他需要颜色映射的图形中使用
基本语法:
plt.colorbar(mappable=None, cax=None, ax=None, **kw)
mappable:必选,表示颜色映射对象,通常是通过plt.contour(),plt.imshow(), 或plt.scatter()等生成的图像。cax:可选,指定一个 Matplotlib 的 axes 对象,用于放置颜色条。如果未给定,颜色条会自动放置在图形的旁边。ax:可选,指定颜色条的父 axes,主要用于复杂的绘图布局。**kw:其他可选参数,例如label、orientation(水平或垂直)、shrink(缩放)等。
练习1
import numpy as np
import matplotlib.pyplot as plt
# 定义横坐标和纵坐标的范围
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
# 生成坐标网格
X, Y = np.meshgrid(x, y)
# 计算一个函数的值,例如 Z = X^2 + Y^2
Z = X**2 + Y**2
# 绘制轮廓图
contour = plt.contour(X, Y, Z, levels=20, cmap='viridis')
# 添加色条
colorbar = plt.colorbar(contour, label='Z value')
# 设置色条的标签
colorbar.set_label('Z value in contour plot')
# 添加标题和标签
plt.title('Contour Plot with Colorbar')
plt.xlabel('X axis')
plt.ylabel('Y axis')
# 显示图形
plt.show()
结果显示:(colorbar就是红色椭圆圈起来的地方)

练习2:【稍难一点】
#%%
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
# 生成数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 为线段着色
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
norm = plt.Normalize(y.min(), y.max())
colors = plt.cm.viridis(norm(y)) # 使用颜色映射
# 创建 LineCollection 对象
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(y) # 设置颜色数据
lc.set_linewidth(2) # 设置线宽
# 创建图形和轴
fig, ax = plt.subplots()
ax.add_collection(lc) # 在轴中添加 LineCollection
ax.autoscale_view() # 自动缩放视图范围
ax.set_xlim(x.min(), x.max()) # 设置 x 轴范围
ax.set_ylim(y.min(), y.max()) # 设置 y 轴范围
# 添加颜色条
cbar = plt.colorbar(lc, ax=ax)
cbar.set_label('Y-value') # 设置颜色条标签
# 设置标题和轴标签
plt.title('Line Plot with Colorbar')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
# 显示图形
plt.show()
np.mean()
NumPy 库中的一个函数,用于计算数组元素的平均值。它可以处理多维数组,并允许通过参数指定计算的轴(axis)。
语法
numpy.mean(a, axis=None, dtype=None, out=None, keepdims=False)
参数:
a:输入数组,可以是任意形状的 NumPy 数组。axis:可选,指定沿哪个轴计算均值,默认为None,表示计算所有元素的均值。如果是一个整数,表示计算对应轴的均值;如果是一个 tuple,表示在多个轴上计算均值。dtype:可选,指定用于计算均值的数据类型。默认情况下,使用输入数组的数据类型。out:可选,指定输出数组。如果提供,结果将存储在这个数组中,而不是创建新的数组。keepdims:可选,布尔值。如果为True,则返回的数组将在计算的轴上保持维度为 1。
注意:
如果a是一个三维数组,沿着第1、2个轴得到平均值,一下两种语法相等
#语句2
averaged_t = np.mean(t,axis=(0,1))
#语句2
averaged_t = np.mean(np.mean(theta,axis=0),axis=0)
练习1:1维数组的均值
import numpy as np
# 创建一维数组
arr1d = np.array([1, 2, 3, 4, 5])
# 计算均值
mean_value = np.mean(arr1d)
print("一维数组的均值:", mean_value)
练习2:2维数组的均值
# 创建二维数组
arr2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 计算所有元素的均值
mean_all = np.mean(arr2d)
print("二维数组所有元素的均值:", mean_all)
# 计算每列的均值(沿 axis=0)
mean_columns = np.mean(arr2d, axis=0)
print("二维数组每列的均值:", mean_columns)
# 计算每行的均值(沿 axis=1)
mean_rows = np.mean(arr2d, axis=1)
print("二维数组每行的均值:", mean_rows)
练习3:3维数组的均值
# 创建三维数组
arr3d = np.array([[[1, 2], [3, 4]],
[[5, 6], [7, 8]]])
# 计算所有元素的均值
mean_all_3d = np.mean(arr3d)
print("三维数组所有元素的均值:", mean_all_3d)
# 计算第二个轴(axis=1)的均值
mean_axis1 = np.mean(arr3d, axis=1)
print("三维数组沿轴1的均值:", mean_axis1)
# 计算第一个轴(axis=0)的均值
mean_axis0 = np.mean(arr3d, axis=0)
print("三维数组沿轴0的均值:", mean_axis0)
结果显示:
输出示例
- 一维数组的均值:
3.0 - 二维数组所有元素的均值:
5.0 - 二维数组每列的均值:
[4. 5. 6.] - 二维数组每行的均值:
[2. 5. 8.] - 三维数组所有元素的均值:
4.5 - 三维数组沿轴1的均值:
[[2. 3.] [6. 7.]] - 三维数组沿轴0的均值:
[[3. 4.] [5. 6.]]
np.squeeze
是 NumPy 库中的一个函数,用于移除数组中维度为1的轴。这在处理多维数据时非常有用,可以简化数组的形状,特别是在进行数组操作或数据处理时
语法:
numpy.squeeze(a, axis=None)
- 参数:
a:输入数组,可以是任意形状的 NumPy 数组。axis:可选,整数或整数元组,指定要移除的轴。仅能移除维度为1的轴。如果指定的轴不是维度为1的轴,将引发错误。如果不提供,squeeze将移除所有维度为1的轴。
返回值
返回一个新的数组,去掉了指定的维度为1的轴(如果存在)。
可以通过赋值的方式,来返回。
#t为一个二维数组,其中一个维度是1
t = np.squeeze(t)
练习1:基本用法
import numpy as np
# 创建一个带有维度为1的数组
arr = np.array([[[1, 2, 3]]])
print("原始数组的形状:", arr.shape) # 输出 (1, 1, 3)
# 使用 np.squeeze() 移除维度为1的轴
squeezed_arr = np.squeeze(arr)
print("压缩后的数组:", squeezed_arr)
print("压缩后的数组的形状:", squeezed_arr.shape) # 输出 (3,)
练习2:指定轴
# 创建一个二维数组,第二个维度为1
arr2d = np.array([[1], [2], [3]])
print("原始数组的形状:", arr2d.shape) # 输出 (3, 1)
# 使用 np.squeeze() 移除第二个维度
squeezed_arr2d = np.squeeze(arr2d, axis=1) # 仅移除第二个轴
print("压缩后的数组:", squeezed_arr2d)
print("压缩后的数组的形状:", squeezed_arr2d.shape) # 输出 (3,)
plt.figure()
plt.grid()
plt.box()
numpy.trapz(y, x=None, dx=1.0, axis=-1)
plt.gca().tick_params(axis='both', which='major', labelsize=16)
np.trapz()
是 NumPy 库中的一个函数,用于计算给定数据的积分值,使用梯形规则进行数值积分。
特点:这个函数通常用于在已知数据点的情况下评估积分,尤其是当你没有解析函数形式时(即:没有函数表达式,只有离散的函数值)。
语法:
numpy.trapz(y, x=None, dx=1.0, axis=-1)
参数
- y: 输入数组,可以是一维或多维。如果是多维,
axis参数定义了哪一维用于积分。 - x: (可选)与 y 对应的横坐标,如果未提供,默认为
0, 1, 2, ..., len(y) - 1。 - dx: (可选)代表 x 数据的间距。如果给定
x,则该参数会被忽略。 - axis: (可选)指定沿哪个轴进行积分,默认为最后一个轴。
返回值
返回给定数据积分的值。
练习1:1D
import numpy as np
import matplotlib.pyplot as plt
# 定义x和y数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 使用np.trapz计算积分
integral = np.trapz(y, x)
print("Integral of sin(x) from 0 to 10 is:", integral)
# 绘图
plt.plot(x, y)
plt.fill_between(x, y, alpha=0.5)
plt.title('Integral of sin(x)')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.show()
练习2:2D
如果有多个 y 数据点,比如在不同时间点(类似于一个二维数组):
# 定义二维数据
y = np.array([[1, 2, 3],
[2, 4, 6],
[3, 6, 9]])
# 积分沿着轴0
integral_axis0 = np.trapz(y, axis=0)
print("Integral along axis 0:", integral_axis0)
# 积分沿着轴1
integral_axis1 = np.trapz(y, axis=1)
print("Integral along axis 1:", integral_axis1)
练习3:离散的数据点
import numpy as np
import matplotlib.pyplot as plt
# 定义 x 和对应的 y 数据
x = np.array([0, 1, 3, 4, 5]) # 非均匀间距
y = np.array([0, 1, 0, 1, 0]) # y 值
# 使用 np.trapz 计算积分
integral = np.trapz(y, x)
print("Integral result:", integral)
# 可视化
plt.plot(x, y, marker='o')
plt.fill_between(x, y, alpha=0.5)
plt.title('Area under the curve')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
解释例子中的参数
- 在上面的代码中,
x是[0, 1, 3, 4, 5],对应于y中的[0, 1, 0, 1, 0]。 - 通过指定
x,np.trapz能够根据x的非均匀间距计算出积分值,而不仅仅是简单的累加。
plt.quiver()
plt.quiver 函数来绘制二维矢量场
语法:
fig = plt.figure(figsize = (8,6), dpi=100)
plt.quiver(X[::3, ::3], Y[::3, ::3], u[::3, ::3], v[::3, ::3]);
在示例中,XYuv都是二维的,所以不是X[::3],而是X[::3,::3]
-
X[::3, ::3]和Y[::3, ::3]:X和Y是用于定义矢量起始点的位置,为二维网格的坐标。::3是切片操作,表示每隔 3 个元素取一个值。通过这种方式,你只选择了网格中的部分点以减少矢量的数量,这样可以使得图形更加清晰,不至于矢量重叠。
-
u[::3, ::3]和v[::3, ::3]:u和v是二维数组,分别表示每个点的矢量在 X 和 Y 方向上的分量。- 同样通过
::3切片,只取每隔 3 个元素的值,确保与所选的 X 和 Y 坐标对应。
-
plt.quiver(...):quiver函数绘制的是一个包含箭头的二维矢量图。- 函数的参数表明:
- 第一个参数是 X 轴坐标。
- 第二个参数是 Y 轴坐标。
- 第三个参数是 X 方向的矢量分量(
u)。 - 第四个参数是 Y 方向的矢量分量(
v)。
结果:
plt.axvline(x, color='color_name', linestyle='style', linewidth=value, label='label')
import scipy.io
plt.axvline()
语法
plt.axvline(x, color='color_name', linestyle='style', linewidth=value, label='label')
参数
-
x: 必填参数,表示垂直线的位置(x 坐标)。 -
color: 线条颜色,可以使用颜色名(如'red','blue')、简写(如'r','b'),或者十六进制颜色码(如'#FF0000')。 -
linestyle: 线条样式,可以是:'-'或None:实线'--':虚线'-.':点划线':':点线
-
linewidth: 线条的宽度,默认为 1。 -
label: 为线条设置一个标签,通常用于图例中。
经典语句摘录
time_selcet=np.arange(np.min(t),np.max(t),50).astype(int)
plt.gca().tick_params(axis='both', which='major', labelsize=16)
plt.gca(): 获取当前的坐标轴(Axes)对象。tick_params(...): 这个函数用于设置坐标轴的刻度参数。axis='both': 表示要设置 x 轴和 y 轴的刻度。which='major': 指定只修改主刻度(即主要的刻度线和标签),不包括次刻度。labelsize=16: 设定主刻度标签的字体大小为 16。
970

被折叠的 条评论
为什么被折叠?



