python&numpy学习笔记

部署运行你感兴趣的模型镜像

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(可选):返回数组的数据类型,如果未指定,则根据输入数据推断。

注意:

  1. 结束值不包含在内: stop 参数指定的值不会出现在生成的数组中。

  2. 类型自动推断: 如果没有指定 dtype,NumPy 会根据输入的参数来推断数据类型。

  3. 步长可以是负数:如果 start 大于 stop,你可以使用负步长来创建递减的数组。例如:np.arange(10, 0, -1) 会生成一个包含 10 到 1 的数组。

  4. 生成一系列递增/减数的数组。

  5. 生成的数可能是小数,所以

示例:

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()

结果对比:

contour
contourf

 

 

plt.contour

        是 Matplotlib 库中的一个函数,用于绘制轮廓线图(Contour Plot)。轮廓线图通过连接具有相同值的点(等高线)来表示三维数据的二维投影,常用于表示函数的离散值,如高度、温度等。

功能:
  • 可视化多维数据:非常适合展示函数在平面上的变化情况。
  • 智能分层:可以选择轮廓线的数量和分层方式。
语法:
plt.contour(X, Y, Z, levels=None, cmap='viridis', **kwargs)
  • XY:表示坐标网格的二维数组,通常通过 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:其他可选参数,例如 labelorientation(水平或垂直)、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]
  • 通过指定 xnp.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]

  1. X[::3, ::3] 和 Y[::3, ::3]:

    • X 和 Y 是用于定义矢量起始点的位置,为二维网格的坐标。
    • ::3 是切片操作,表示每隔 3 个元素取一个值。通过这种方式,你只选择了网格中的部分点以减少矢量的数量,这样可以使得图形更加清晰,不至于矢量重叠。
  2. u[::3, ::3] 和 v[::3, ::3]:

    • u 和 v 是二维数组,分别表示每个点的矢量在 X 和 Y 方向上的分量。
    • 同样通过 ::3 切片,只取每隔 3 个元素的值,确保与所选的 X 和 Y 坐标对应。
  3. 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。

plt.gca().invert_yaxis()

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值