matlab笔记

目录标题

把X’归一化到0.01到1

x=mapminmax(X',0.01,1);

eye函数

eye(3):阶数为三的单位矩阵

[0,1]区域转化为实数域的方法

在这里插入图片描述
logit代码:

lyc = log(yc ./ (1 - yc));   % logit变换后的乙醇转化率
lxt = log(xt ./ (1 - xt));   % logit变换后的C4烯烃选择性
data1.lyc = lyc;
data1.lxt = lxt;

斯皮尔曼相关系数求法

[r1,p1] = corr(tmp.wd,tmp.lyc,"type","Spearman")

在这里插入图片描述

多项式拟合

Y1 = tmp.lyc;  %  logit变换后的乙醇转化率
Y2 = tmp.lxt;  %  logit变换后的C4烯烃选择性
X = tmp.wd; % 自变量 温度%两个
ft1 = fittype( 'poly1' );  % 一次函数拟合
format long  % 设置输出显示格式
[fitresult1, gof1, output1] = fit( X, Y1, ft1)

output1
在这里插入图片描述

自变量样本有5个,拟合的未知数两个。(a0,a1)

fitresult1
在这里插入图片描述

feval(fitresult1,X)  % 计算拟合值

即计算拟合值,即把X带入到f(x)中

output1.residuals  % 残差
coeffvalues(fitresult1)  % 拟合出来的系数

调整后的R方(Adjusted R-squared)是一种修正的决定系数,用于解决多元回归模型中自变量个数对决定系数的偏差问题。相对于原始的R方,调整后的R方考虑了要拟合的参数数量的影响,提供了更准确的模型拟合度量。
Adjusted_R² = 1 - [(1 - R²) * (n - 1) / (n - v)]
其中,R²为原始的决定系数,n为样本数量,v为拟合的未知参数的个数。
调整后的R方与原始的R方相比,可以更准确地评估多元回归模型的拟合程度。它考虑了自变量个数的增加对模型的复杂度和解释能力的影响,从而避免了自变量个数过多时原始R方过于乐观的估计。

比较调整后的R方来判断用一次还是二次

绘制拟合效果图:

figure(111)
p1 = plot(fitresult1,'b-',X, Y1,'k*');

绘制一次的图:
在这里插入图片描述

‘k*’:黑色的散点
改标记大小:

p1(1).MarkerSize = 10;
p1(2).LineWidth = 1.5;
leg.String = {'原始数据','一次函数','二次函数'};
leg.Location = 'northwest';
% 改图例的位置
xlabel('温度');
ylabel('logit变换后的乙醇转化率')
title(uid(k))
hold off
% hold on后要hold off

改图例显示和方位

res(:,1) > 0

输出一个逻辑矩阵

uid(res(:,1) > 0

输出开口向上的编号

join(uid(res(:,1) > 0),",")

将这些字符串中间逗号连接
输出结果如图:
在这里插入图片描述

text函数

绘制一条正弦曲线。在点 (π,0) 处,添加文本说明 sin(π)。使用 TeX 标记 \pi 表示希腊字母 π。使用 \leftarrow 显示一个向左箭头。

eg1

x = 0:pi/20:2*pi;
y = sin(x);
plot(x,y)
text(pi,0,'\leftarrow sin(\pi)')

eg2

text(t+5,d2(:,k),(string(round(d2(:,k),2))))

t+5为7个数:7*1,d2(:,k)也为向量组,(string(round(d2(:,k),2))为表达的值。

在这里插入图片描述

string函数

a=1;
b=string(a);

在这里插入图片描述

把数组变为字符串数组(一般再添加文本时用)

画堆叠图

figure
s = stackedplot(t,d2,'*','LineWidth',1.5,'MarkerSize',10);%stackedplot:画堆叠图
s.DisplayLabels = cellstr(name);%纵坐标转化为元胞数组
xlabel('时间')

在这里插入图片描述

在这里插入图片描述

strrep函数

查找并替换子字符串

eg1

chr = 'The quick brown fox'
newChr = strrep(chr,'quick','sly')

在这里插入图片描述

eg2

a=["csc cc"];
b=strrep(a,"cc","ba");

在这里插入图片描述

name3 = strrep(name(2:end),"选择性(%)","")%把选择性替换为空的字符串    

name3:1*6

tiledlayout绘图

close all
f = figure;
set(f, 'Units', 'normalized')  % 设置 Units 为 normalized

set(f, 'Position', [0.05 0.05 0.8 0.8])  % 设置窗口位置和大小
% 前两个元素 [0.05 0.05] 是窗口左下角的位置,
% 后两个元素 [0.8 0.8] 是窗口的宽度和高度。

tiledlayout(3,3)  % tiledlayout绘图;也可以用subplot
% tiledlayout绘图方便使用legend

for ii = 1:length(unique(t))
%     unique排序(重复只要一次)
    nexttile
    pie(d3(ii,:),'%.2f%%');% pie画饼图 
    %.2f:保留两位有效数字
    tit = title(string(t(ii))+"min");
    tit.Position(2) = tit.Position(2) * 1.1; % 调整位置:调整标题到图像的距离
    tit.Color = [1 0 0];
end

lgd = legend(name3,'Orientation','horizontal', ...
    'NumColumns',3, ...
    'FontSize',15);%3:每一行支持几个元素
lgd.Layout.Tile = 'south';

注释:

pie(d3(ii,:),'%.2f%%');

一个百分号代表数据的样式。
它以百分号开头。
‘%.2f%%’:保留两位数且加个百分号。
.2f表示保留两位有效数字。

 pie(d3(ii,:),'%.2f');

此时去掉百分号

tit.Position(2) = tit.Position(2) * 1.1;

调整标题距离图像的位置(之前可能有点挤)

lgd = legend(name3,'Orientation','horizontal', ...
    'NumColumns',3, ...
    'FontSize',15);

注释:
3:每一行最多有几个元素

堆叠柱状图

在这里插入图片描述

close all
f = figure;
set(f, 'Units', 'normalized')  % 设置 Units 为 normalized
set(f, 'Position', [0.2 0.2 0.6 0.6])  % 设置窗口位置和大小
bar(t,d3,'stacked')
xlabel('时间min')
ylabel('选择性(%)')
lgd = legend(name3,'Location','bestoutside');
% % 下面四行代码可以翻转图例,这样图形的颜色顺序和图例顺序能对应上
labels = get(lgd, 'String');
plots = flipud(get(gca, 'children'));
neworder = 6:-1:1;
legend(plots(neworder), labels(neworder))

注释:

set(f, 'Units', 'normalized')  % 设置 Units 为 normalized
set(f, 'Position', [0.2 0.2 0.6 0.6])  % 设置窗口位置和大小

设置图像的大小,位置。

计算增长率

增长率:(后一期数据 - 前一期数据) / 前一期数据 * 100 %

d2
% diff:求差分
diff(d2)  % diff(d2)等同于:d2(2:end,:) - d2(1:(end-1),:)
growth_rate = (diff(d2) ./ d2(1:(end-1),:)) * 100
name

注释:即第二减去第一

在这里插入图片描述

根据判断标准,判断哪个指标趋于稳定。

拟合函数设置(自定义函数)

一次函数拟合

ft1 = fittype( @(a, b, t) (a*t+b).*(t<240) + (a*240+b).*(t>=240) , ...%也可以写m文件
    'independent','t');% 'independent','t'定义自变量t
%使用fittype自定义函数
[fitresult1, gof1, output1] = fit(t, d, ft1, ...%fit函数进行拟合
    'Start', [-1e-2 -0.2]) 
% rmse均方根误差

注释:
1.

ft1 = fittype( @(a, b, t) (a*t+b).*(t<240) + (a*240+b).*(t>=240) , ...%也可以写m文件
    'independent','t')

说明t为自变量

[fitresult1, gof1, output1] = fit(t, d, ft1, 'Start', [-1e-2 -0.2]) 

为了更快拟合,设置初始点搜索范围(拟合的a,b在哪一点开始搜索)

二次函数拟合

 ft2 = fittype( @(a, b, c, t) (a*t.^2+b*t+c).*(t<240) + (a*240^2+b*240+c).*(t>=240), ...
    'independent','t');
[fitresult2, gof2, output2] = fit(t,d, ft2, ...
    'Start', [1e-5, -1e-2 -0.2])

注释:
给三个初始点。

 ft2 = fittype( @(a, b, c, t) (a*t.^2+b*t+c).*(t<240) + (a*240^2+b*240+c).*(t>=240), ...
    'independent','t');

注意这里是点乘.^2

Logistic模型的公式:

在这里插入图片描述
(递增的)

xm表示趋于稳定时x的取值,r表示增长率,这两个参数是要拟合的参数。
x0表示初始时刻x的值,t0表示初始时刻。

如果要改成递减的阻滞模型,只需要将分母中增长率r前面的负号去掉,此时拟合得到的r会是一个负数,表示衰减率。

x0 = d(1)
t0 = t(1)
ft3 = fittype( @(xm, r, t) xm./(1+ (xm/-0.2596 - 1)*exp(r*(t-20))), ...
    'independent','t');
[fitresult3, gof3, output3] = fit(t,d, ft3, ...
    'Start', [-0.9 -0.1])

logit变换

在这里插入图片描述
把[0,1]转化到实数域

lyc = log(yc ./ (1 - yc));   % logit变换后的乙醇转化率
lxt = log(xt ./ (1 - xt));   % logit变换后的C4烯烃选择性

logit变换:

d = d2(:,1)/100;
d = log(d./(1 - d));

logit变换还原:

exp(y1) / (1 + exp(y1)) * 100
exp(y2) / (1 + exp(y2))  * 100

算一个数组的不重复的长度

length(unique(t))

startsWith函数

str = ["abstract.docx","data.tar","code.m"; ...
       "data-analysis.ppt","results.ptx","summary.ppt"]
       pat = "data";
TF = startsWith(str,pat)
TF为逻辑数组

在这里插入图片描述

设置装料方式:

zl(startsWith(data1.id,"A")) = 1;

max函数返回索引值

[m1,ind1] = max(data1.yc .* data1.xt / 10000)

对向量组进行操作

添加实验的思路

在这里插入图片描述

numel函数

n = numel(A) 返回数组 A 中的元素数目 n。

newline函数(输出格式的时候经常用)

换行

eg1:

  fprintf("温度:"+wd(ii)+newline)

eg2:

 fprintf(join(  zbmc + ":"+ string(x), newline))

注释:
1.
在这里插入图片描述
2.
在这里插入图片描述
输出结果:
在这里插入图片描述

求间隔差的方差的代码(均匀性分布原则)

均匀性分布原则:在进行多元实验设计时,应尽可能保证样本点在整个因素水平空间内均匀分布。也就是说,对于你正在研究的每个因素,你都应该尝试涵盖其可能的全范围,而且这些测试点应该在这个范围内均匀分布。
目标:相邻的指标之间的间隔差的方差最小

wd1 = [10 20 100];
var(diff(sort(wd1)))
wd1 = [10 40 100];
var(diff(sort(wd1)))
wd1 = [10 55 100];
var(diff(sort(wd1)))

枚举法:

load meijv.mat
numIndicators = 5;
numPossibilities = 5;
% 生成指标的所有可能取值
indicators = cell(1, numIndicators);
[indicators{:}] = ndgrid(1:numPossibilities);
% 将指标的所有可能取值合并成一个矩阵
allCombinations = reshape(cat(numIndicators + 1, indicators{:}), [], numIndicators);
% 显示所有组合
allCombinations
N = size(allCombinations,1);
c4xtsl = zeros(N,1);
X = ones(N,6);
for ii = 1:N
    x = ones(1,6);
    tmp = allCombinations(ii,:);
    for jj = 1:5
       x(jj) =  Result(jj,tmp(jj));
    end
    X(ii,:) = x;
    y1 =  predict(gprMdl1, x);
    y1 =  exp(y1) / (1 + exp(y1));  % 乙醇转化率
    y2 =  predict(gprMdl2, x);
    y2 =  exp(y2) / (1 + exp(y2));  % C4烯烃选择性
    c4xtsl(ii) = y1*y2;
end
[c4xtsl_sort,ind] = sort(c4xtsl,'descend');
X_sort = X(ind,:);
c4xtsl_sort(1:5,:)
X_sort(1:5,:)

sort函数(返回索引)

[c4xtsl_sort,ind] = sort(c4xtsl,'descend');

std函数(标准差函数)

统一量纲的代码(zscore标准化)(使得X4_z方差均为一)

mean_x4 = mean(X4);
std_x4 = std(X4);
X4_z = (X4 - mean_x4) ./ std_x4;

将矩阵展开的方法

aaa=lb(:);

注释:
在这里插入图片描述
展开后:

在这里插入图片描述

reshape函数(重构数组把数组按照自己想要的行和列进行改写)

eg1:

A = 1:10;
B = reshape(A,[5,2])

在这里插入图片描述

eg2:

A = magic(4);
B = reshape(A,[],2)

reshape(A,[],2)把数组写成两列的

repmat

重复数组副本

A = repmat(10,3,2)

在这里插入图片描述

transpose(转置向量)

transpose(zbmc(1:end-1)

提取数组唯一值

uid = unique(data1.id,'stable')  
uid = unique(data1.id) 

unique函数:返回data1.id唯一值。

C = unique(A,setOrder) 以特定顺序返回 A 的唯一值。setOrder 可以是 ‘sorted’(默认值)或 ‘stable’。
eg:计算 A 的唯一值。

A = [9 2 9 5];
C = unique(A)
C = 1×3
 2     5     9

在这里插入图片描述

cumsum函数

A = [1 4 7; 2 5 8; 3 6 9]
B = cumsum(A)

在这里插入图片描述

A = [1 3 5; 2 4 6]
B = cumsum(A,2)

在这里插入图片描述

数据标准化

zcore标准化

2021b代码
在这里插入图片描述

zcore标准化目的是去除量纲,使得方差相等。

ab=zscore (S) ;
ab=zscore (S) ;
 a=ab(:,[1:3]); b=ab( : ,[4 :end]);

在这里插入图片描述
在这里插入图片描述

求相关系数矩

r=corrcoef (S);

在这里插入图片描述

分别提出自变量组和因变量组的成分

在这里插入图片描述

 [XL,YL,XS,YS,BETA,PCTVAR,MSE,stats ] =plsregress (a ,b);
% PCTVAR是_个两行矩阵,第一行的每个元素对应着自变量提出成分的贡献率,第二行的每个元素对
% 应着因变量提出成分的贡献率
contr=cumsum(PCTVAR,2);
xw=a\XS;
yw=b\YS;

在这里插入图片描述
x的 系数(竖的看)对比:

在这里插入图片描述
y的 系数(竖的看)对比:

在这里插入图片描述

求因变量组与子变量组之间的回归方程。

[XL2,YL2,XS2,YS2,BETA2,PCTVAR2,MSE2,stats2] =plsregress (a,b,ncomp)

在这里插入图片描述
BETA2为标准化前的系数(竖着看):
在这里插入图片描述

beta3(1, : ) =mu (n+1:end)-mu (1 :n)./sig (1:n)* BETA2([2:end] , : ).* sig (n+1:end);
beta3([2:n+1],:)=(1./ sig(1:n) )' * sig (n+1:end).* BETA2([2:end], :)

在这里插入图片描述
系数(竖着看)

反标准化

在这里插入图片描述

bar函数

绘制反zcore化前的图像
在这里插入图片描述

bar(xBETA2);
legend({'图例1', '图例2','图例2'})
labels = {'单杠', '弯曲', '酬工'};
xticklabels(labels)

求预测值

20个样本,三个特征
在这里插入图片描述

yhat =repmat (beta3 (1,:),[size(a,1),1] )+ab0(:,[1:n] ) * beta3( [2:end], :)

求预测值和观测值的最大值(画图用)

ymax =max([yhat ;ab0( : , [n+1:end])]);%求预测值和观测值的最大值

画图分析

在这里插入图片描述

在这个预测图上,如果
所有点都能在图的对角线附近均匀分布’则方程的拟合值与原值差异很小,这个方程的拟
合效果就是令人满意的。

在这里插入图片描述

绘图

图一

在这里插入图片描述

代码:

figure
plot(wd,yc,'d',wd,xt,'o','LineWidth',2,'MarkerSize',8)
% LineWidth对图例宽度起到作用
xlabel('温度')
title(uid(k))
legend('乙醇转化率(%)','C4烯烃选择性(%)','Location','northwest')

图二(许多子图)

在这里插入图片描述

代码

close all
figure
for k = 1:m
    tmp = data1(data1.id == uid(k),:);
    % yc: 乙醇转化率(%)
    % xt: C4烯烃选择性(%)
    wd = tmp.wd;
    yc = tmp.yc;
    xt = tmp.xt;
    subplot(4,5,k)
    % 20个催化剂正好4*5=20    
    plot(wd,yc,'d',wd,xt,'o','LineWidth',2,'MarkerSize',8)
    % xlabel('温度')
    title(uid(k))
    if k == 20
        legend('乙醇转化率(%)','C4烯烃选择性(%)','Orientation','horizontal','FontSize',12)
%         Orientation(方向),horizontal方向给成立水平方向
    end
end

图三(线性图)

在这里插入图片描述

代码

close all
figure(111)
p1 = plot(fitresult1,'b-',X, Y1,'k*');
% k:指黑色的散点
p1(1).MarkerSize = 10;
p1(2).LineWidth = 1.5;
hold on
p2 = plot(fitresult2,'r-');
p2.LineWidth = 1.5;
leg = findobj(gcf,'Type','legend');
% findobj:找到当前图的图例
leg.String = {'原始数据','一次函数','二次函数'};
leg.Location = 'northwest';
% 改图例的位置
xlabel('温度');
ylabel('logit变换后的乙醇转化率')
title(uid(k))
hold off

字符串拼接

字符串连接1

s = "乙醇转化率"+":"+"开口向下的有:"

在这里插入图片描述

字符串连接2(join)

str = ["Carlos","Sada";
       "Ella","Olsen";
       "Diana","Lee"]
newStr = join(str)

在这里插入图片描述

组合字母和数字并进行输出(join函数)

for qq = 1:k
   fprintf("-----------------------------------------------------------" + newline)
   fprintf("第"+qq+"组"+newline)
   fprintf(join(  transpose(zbmc(1:end-1) )+ ":"+ string(Result(:,qq)), newline))
   fprintf(newline)
end

在这里插入图片描述
在这里插入图片描述

运行结果:

在这里插入图片描述

字符串连接(加入符合)1

在这里插入图片描述

str = ["x","y","z";
       "a","b","c"]
newStr = join(str,"-")

字符串连接(加入符合)2

str = ["x","y","z";
       "a","b","c"]
delimiters = [" + "," = ";
              " - "," = "];
newStr = join(str,delimiters)

在这里插入图片描述

cell 数组中是否包含特定的单词(字符串)

要判断一个 cell 数组中是否包含特定的单词(字符串),你可以使用循环遍历每个 cell 元素,并使用字符串处理函数来判断每个单元格中是否包含该单词。以下是一个示例:

% 创建一个包含字符串的 cell 数组
cellArray = {'This is a sample string.', 'Another cell.', 'No c here.', 'Contains c.'};
wordToFind = 'c';

% 初始化一个标志变量
found = false;

% 遍历每个 cell 元素
for i = 1:numel(cellArray)
    if contains(cellArray{i}, wordToFind)
        found = true;
        break;  % 一旦找到,就可以退出循环
    end
end

if found
    disp('The word c is present in the cell array.');
else
    disp('The word c is not present in the cell array.');
end

区分包含不同字符的字符串数组

在这里插入图片描述
我们将FileNames进行分类,区分出包含c和d字符串数组。
FileNames如图所示。

n = length(FileNames);
cc=0;
dd=0;
FileNamesc={};
FileNamesb={};

for ii=1:n
tem1=  FileNames(ii);
wordToFind = 'c';
found = false;
for i = 1:numel(tem1)
    if contains(tem1{i}, wordToFind)
        found = true;
        break;  
    end
end

if found
    cc=cc+1;
    FileNamesc(cc,1)=FileNames(ii);
else
    dd=dd+1;
     FileNamesb(dd,1)=FileNames(ii);
end
end

注释:
1.定义cell数组FileNamesc={},数值数组定义为格式为:FileNamesc=[]。
2.tem1= FileNames(ii);取第 i i ii ii个元素进行判断。
3.wordToFind = ‘c’;为区分的元素。
4.FileNamesc(cc,1)=FileNames(ii);cell数组和cell数组之间转化用(),cell转化为double用{}。
eg:

a={1}
b=a{1}

a为cell型,b为double型。

排序

例题一

data = [5, 1, 3, 8, 2];
% [sortedData, sortedIndex] = sort(data);%升序排序
[sortedData, sortedIndex] = sort(data,'descend');%降序排序
rearrangedData = data(sortedIndex);
disp(rearrangedData);;

在这个例子中,我们按行对矩阵进行排序,并使用 sortedIndex 对矩阵进行索引操作,得到按行排序后的矩阵。

例题二

在这里插入图片描述

for ii = 1:cc
pattern = '(\d+)';
        matches = regexp(FileNamesc, pattern, 'tokens'); 
        tem2=  matches{ii};
        ccz(ii,1)=str2double(tem2{1});           
end
 [C, idxc] = sort(ccz);
cxFileNames=FileNamesc(idxc);

我们需要把这组数据按照数字大小进行升序排序
1.使用正则化提取文章中的数字。
2.使用 sort函数进行沈旭排序,并使用 idxc 对矩阵进行索引操作,得到按行排序后的矩阵。

筛选

数据提取

在这里插入图片描述
我们需要对data1数据提取ind行作为一个新组AA。

在这里插入图片描述
代码实现:

AA=data1(ind,:);

结果:
在这里插入图片描述

数据删除

我们需要将data1数据ind进行删除,代码实现:

data1(ind,:) = [];
%data1([55,56,57,58,59],:)%或者
data1

数据筛选

我们需要得到,data2相加介于85~105之间的数据。

ss = sum(tmp,2);% sum(A,2) 每一行求和
idx = find((ss < 85 ) | (ss > 105));%|或
data2(idx,:) = [];  

数据透视表

tmp1 = data1(data1.bmfh=='风化' & data1.lx=='铅钡' & data1.ws=='A' ,:);%找到满足这三点要求的数据
tabulate(tmp1.ys)%写出所以颜色对应出现的次数,比率
sortrows(tabulate(tmp1.ys),2,'descend') %对行进行排序,descend降序

在这里插入图片描述

精确查找

clc,clear
shuju = readtable("D:\my_document\latex\markdown\shuju.xlsx");
tem=shuju{:,2};
id=find(tem=="西门花店");
A=shuju(id,:);

储存

excel文件

1.存储为excel文件,使用函数xlswrite

filename = 'testdata.xlsx';
A = [12.7 5.02 -98 63.9 0 -.2 56];
xlswrite(filename,A)

1.存储为excel文件,使用函数xlswrite。:

filename = 'testdata.xlsx';
A = [12.7 5.02 -98 63.9 0 -.2 56];
save('testdata.xlsx', 'A');

mat文件

1.存储为mat文件,使用函数save

filename = 'testdata.xlsx';
A = [12.7 5.02 -98 63.9 0 -.2 56];
save('testdata', 'A');

导入

excel文件

readtable函数(只能读取double型)
filename = 'shuju.xlsx';
A = xlsread(filename);

限制范围:

filename = 'myExample.xlsx';
sheet = 1;
xlRange = 'B2:C3';
subsetA = xlsread(filename,sheet,xlRange)

xlsread函数

shuju = readtable("D:\my_document\latex\markdown\shuju.xlsx");

table型

%% 设置导入选项并导入数据
opts = spreadsheetImportOptions("NumVariables", 3);

% 指定工作表和范围
opts.Sheet = "Sheet1";
opts.DataRange = "A2:C14";

% 指定列名称和类型
opts.VariableNames = ["VarName1", "VarName2", "VarName3"];
opts.VariableTypes = ["string", "categorical", "double"];

% 指定变量属性
opts = setvaropts(opts, "VarName1", "WhitespaceRule", "preserve");
opts = setvaropts(opts, ["VarName1", "VarName2"], "EmptyFieldRule", "auto");

% 导入数据
shuju = readtable("D:\my_document\latex\markdown\shuju.xlsx", opts, "UseExcel", false);

 shuju = readtable("D:\my_document\latex\markdown\shuju.xlsx");

filename = 'shuju.xlsx';
A = xlsread(filename);

mat文件

load data123.mat
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值