矩阵算法之矩阵乘法

这篇具有很好参考价值的文章主要介绍了矩阵算法之矩阵乘法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。

在矩阵乘法中,A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。

运算规则:A的每一行中的数字对应乘以B的每一列的数字把结果相加起来。

定义

矩阵算法之矩阵乘法

注意事项

1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。

2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。

3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。文章来源地址https://www.toymoban.com/news/detail-505685.html

导包

<dependency>
    <groupId>org.ujmp</groupId>
    <artifactId>ujmp-core</artifactId>
    <version>0.3.0</version>
</dependency>

基本运算

矩阵的创建

//创建4×4矩阵
Matrix dense = DenseMatrix.Factory.zeros(4, 4);
//将第2行和第3列的entry设置为值5.0
dense.setAsDouble(5.0, 2, 3);
//设置一些其他值
dense.setAsDouble(1.0, 0, 0);
dense.setAsDouble(3.0, 1, 1);
dense.setAsDouble(4.0, 2, 2);
dense.setAsDouble(-2.0, 3, 3);
dense.setAsDouble(-2.0, 1, 3);
//在控制台上打印最终的矩阵
System.out.println("矩阵dense:\n"+dense);

1.0000     0.0000     0.0000     0.0000
0.0000     3.0000     0.0000    -2.0000
0.0000     0.0000     4.0000     5.0000
0.0000     0.0000     0.0000    -2.0000

矩阵的转置

//矩阵的转置
Matrix transpose = dense.transpose();
System.out.println("矩阵的转置:\n"+transpose);

矩阵的转置:
    1.0000     0.0000     0.0000     0.0000
    0.0000     3.0000     0.0000     0.0000
    0.0000     0.0000     4.0000     0.0000
    0.0000    -2.0000     5.0000    -2.0000
//再来一个矩阵
Matrix sparse = SparseMatrix.Factory.zeros(4, 4);
sparse.setAsDouble(2.0, 0, 0);
System.out.println("矩阵sparse:\n"+sparse);

矩阵sparse:
    2.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     0.0000     0.0000

矩阵的求和

//矩阵的求和
Matrix sum = dense.plus(sparse);
System.out.println("矩阵的求和:\n"+sum);

矩阵的求和:
    3.0000     0.0000     0.0000     0.0000
    0.0000     3.0000     0.0000    -2.0000
    0.0000     0.0000     4.0000     5.0000
    0.0000     0.0000     0.0000    -2.0000

矩阵的相减

//矩阵的相减
Matrix difference = dense.minus(sparse);
System.out.println("矩阵的相减:\n"+difference);

矩阵的相减:
   -1.0000     0.0000     0.0000     0.0000
    0.0000     3.0000     0.0000    -2.0000
    0.0000     0.0000     4.0000     5.0000
    0.0000     0.0000     0.0000    -2.0000

矩阵的乘法

//矩阵的乘法
Matrix matrixProduct = dense.mtimes(sparse);
System.out.println("矩阵的乘法:\n"+matrixProduct);

矩阵的乘法:
    2.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     0.0000     0.0000

矩阵的数乘

//矩阵的数乘
Matrix scaled = dense.times(2.0);
System.out.println("矩阵的数乘:\n"+scaled);

矩阵的数乘:
    2.0000     0.0000     0.0000     0.0000
    0.0000     6.0000     0.0000    -4.0000
    0.0000     0.0000     8.0000    10.0000
    0.0000     0.0000     0.0000    -4.0000

矩阵的逆

//矩阵的逆
Matrix inverse = dense.inv();
System.out.println("矩阵的逆:\n"+inverse);

矩阵的逆:
    1.0000     0.0000     0.0000     0.0000
    0.0000     0.3333     0.0000    -0.3333
    0.0000     0.0000     0.2500     0.6250
   -0.0000    -0.0000    -0.0000    -0.5000

矩阵的伪逆矩阵

//矩阵的伪逆矩阵
Matrix pseudoInverse = dense.pinv();
System.out.println("矩阵的伪逆矩阵:\n"+pseudoInverse);

矩阵的伪逆矩阵:
    1.0000     0.0000     0.0000     0.0000
    0.0000     0.3333     0.0000    -0.3333
    0.0000     0.0000     0.2500     0.6250
    0.0000     0.0000    -0.0000    -0.5000

获取矩阵的行数与列数

//获取矩阵的行数与列数
int rowCount = (int) dense.getRowCount();
System.out.println("矩阵dense的行数:"+rowCount);
int columnCount = (int) dense.getColumnCount();
System.out.println("矩阵dense的列数:"+columnCount);

矩阵dense的行数:4
矩阵dense的列数:4

数组转矩阵

//数组转矩阵
int[][] a = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
};
Matrix arr = DenseMatrix.Factory.importFromArray(a);
System.out.println("数组转矩阵:\n"+arr);

数组转矩阵:
    1.0000     2.0000     3.0000
    4.0000     5.0000     6.0000
    7.0000     8.0000     9.0000

矩阵的行列式

//矩阵的行列式
double determinant = dense.det();
System.out.println("矩阵的行列式:"+determinant);

矩阵的行列式:-24.0

矩阵的奇异值

//矩阵的奇异值
Matrix[] singularValueDecomposition = dense.svd();
System.out.println("矩阵的奇异值:\n"+ Arrays.toString(singularValueDecomposition));

矩阵的奇异值:
[   0.0000     0.0000     0.0000    -1.0000
    0.3007    -0.9410     0.1553    -0.0000
   -0.9222    -0.3284    -0.2041    -0.0000
    0.2430    -0.0819    -0.9666    -0.0000
,   
    6.8481     0.0000     0.0000     0.0000
    0.0000     3.1397     0.0000     0.0000
    0.0000     0.0000     1.1162     0.0000
    0.0000     0.0000     0.0000     1.0000
,   
    0.0000     0.0000     0.0000    -1.0000
    0.1318    -0.8991     0.4174    -0.0000
   -0.5387    -0.4184    -0.7313    -0.0000
   -0.8322     0.1285     0.5395    -0.0000
]

矩阵特征值

//矩阵特征值
Matrix[] eigenValueDecomposition = dense.eig();
System.out.println("矩阵特征值:\n"+ Arrays.toString(eigenValueDecomposition));

矩阵特征值:
[   1.0000     0.0000     0.0000     0.0000
    0.0000     1.0000     0.0000     0.4000
    0.0000     0.0000     1.0000    -0.8333
    0.0000     0.0000     0.0000     1.0000
,   
    1.0000     0.0000     0.0000     0.0000
    0.0000     3.0000     0.0000     0.0000
    0.0000     0.0000     4.0000     0.0000
    0.0000     0.0000     0.0000    -2.0000
]

矩阵LU分解

//矩阵LU分解
Matrix[] luDecomposition = dense.lu();
System.out.println("矩阵LU分解:\n"+ Arrays.toString(luDecomposition));

[   1.0000     0.0000     0.0000     0.0000
    0.0000     1.0000     0.0000     0.0000
    0.0000     0.0000     1.0000     0.0000
    0.0000     0.0000     0.0000     1.0000
,     
    1.0000     0.0000     0.0000     0.0000
    0.0000     3.0000     0.0000    -2.0000
    0.0000     0.0000     4.0000     5.0000
    0.0000     0.0000     0.0000    -2.0000
,    
    1.0000     0.0000     0.0000     0.0000
    0.0000     1.0000     0.0000     0.0000
    0.0000     0.0000     1.0000     0.0000
    0.0000     0.0000     0.0000     1.0000
]

矩阵分解向量化

//矩阵分解向量化
Matrix[] qrDecomposition = dense.qr();
System.out.println("矩阵分解向量化:\n"+ Arrays.toString(qrDecomposition));

[   -1.0000     0.0000     0.0000     0.0000
    0.0000    -1.0000     0.0000     0.0000
    0.0000     0.0000    -1.0000     0.0000
    0.0000     0.0000     0.0000    -1.0000
,   
    -1.0000     0.0000     0.0000     0.0000
    0.0000    -3.0000     0.0000     2.0000
    0.0000     0.0000    -4.0000    -5.0000
    0.0000     0.0000     0.0000     2.0000
]

矩阵特征值

//矩阵特征值
Matrix choleskyDecomposition = dense.chol();
System.out.println("矩阵特征值:\n"+ choleskyDecomposition);

矩阵特征值:
    1.0000     0.0000     0.0000     0.0000
    0.0000     1.7321     0.0000     0.0000
    0.0000     0.0000     2.0000     0.0000
    0.0000     0.0000     0.0000     0.0000

矩阵的拷贝

选取行selectRows(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝
// 选取行selectRows(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝
Matrix row = dense.selectRows(Calculation.Ret.NEW, 0);
System.out.println("选取行深拷贝:\n"+ row);

选取行深拷贝:
    1.0000     0.0000     0.0000     0.0000
选取列selectColumns(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝
// 选取列selectColumns(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝
Matrix column = dense.selectColumns(Calculation.Ret.NEW, 0);
System.out.println("选取列深拷贝:\n"+ column);

选取列深拷贝:
    1.0000
    0.0000
    0.0000
    0.0000
按第j列进行排序sortrows(Calculation.Ret.NEW, j, boolean)
// 按第j列进行排序sortrows(Calculation.Ret.NEW, j, boolean)
Matrix order = dense.sortrows(Calculation.Ret.NEW, 1, false);
System.out.println("按第j列进行排序:\n"+ order);

按第j列进行排序:
    1.0000     0.0000     0.0000     0.0000
    0.0000     0.0000     4.0000     5.0000
    0.0000     0.0000     0.0000    -2.0000
    0.0000     3.0000     0.0000    -2.0000

将矩阵的所有数值相加得到的返回值

// 将矩阵的所有数值相加得到的返回值
double accumulation = dense.getValueSum();
System.out.println("将矩阵的所有数值相加得到的返回值:"+ accumulation);

将矩阵的所有数值相加得到的返回值:9.0

矩阵的创建

//创建4×4矩阵
Matrix dense = DenseMatrix.Factory.zeros(4, 4);
System.out.println("dense:\n"+dense);

//用0到1之间的随机值创建矩阵
Matrix rand = Matrix.Factory.rand(100, 10);
System.out.println("rand:\n"+rand);

//创建矩阵与-1和-1之间的随机值
Matrix randn = Matrix.Factory.randn(100, 10);
System.out.println("randn:\n"+randn);

//本地主机矩阵
Matrix localhost = Matrix.Factory.localhostMatrix();
System.out.println("localhost:\n"+localhost);

//大稀疏矩阵
SparseMatrix m1 = SparseMatrix.Factory.zeros(1000000, 500000);
System.out.println("m1:\n"+m1);

余弦相似矩阵

//余弦相似矩阵
// 创建10个相关列,100行,相关性0.1的矩阵
Matrix correlated = Matrix.Factory.correlatedColumns(100, 10, 0.1);
System.out.println("correlated:\n"+correlated);
// 计算相似度并存储在新矩阵中
// 如果存在,忽略缺失值
Matrix similarity = correlated.cosineSimilarity(Calculation.Ret.NEW, true);
System.out.println("similarity:\n"+similarity);

图像矩阵

//图像矩阵
//图片方resources下
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("test.jpg");
//加载图像到矩阵。当然,这也适用于文件
Matrix imageMatrix = new ImageMatrix(is);
System.out.println("imageMatrix:\n"+imageMatrix);
is.close();

大稀疏矩阵

//大稀疏矩阵
//创建一个非常大的稀疏矩阵
SparseMatrix m1 = SparseMatrix.Factory.zeros(1000000, 500000);
//设置一些值
m1.setAsDouble(MathUtil.nextGaussian(), 0, 0);
m1.setAsDouble(MathUtil.nextGaussian(), 1, 1);
for (int i = 0; i < 10000; i++) {
    m1.setAsDouble(MathUtil.nextGaussian(), MathUtil.nextInteger(0, 1000), MathUtil.nextInteger(0, 1000));
}
System.out.println("m1:\n"+m1);
//创建另一个矩阵
SparseMatrix m2 = SparseMatrix.Factory.zeros(3000000, 500000);
m2.setAsDouble(MathUtil.nextGaussian(), 0, 0);
m2.setAsDouble(MathUtil.nextGaussian(), 1, 1);
for (int i = 0; i < 10000; i++) {
    m2.setAsDouble(MathUtil.nextGaussian(), MathUtil.nextInteger(0, 1000), MathUtil.nextInteger(0, 1000));
}
System.out.println("m2:\n"+m2);
// m2矩阵转置后 与m1矩阵相乘法
Matrix m3 = m1.mtimes(m2.transpose());
System.out.println("m3:\n"+m3);

提取Excel数据

//提取Excel数据
// find all Excel files in one directory
File[] files = new File("D:/xx/xx").listFiles();
//在一个目录下找到所有Excel文件
assert files != null;
Matrix result = Matrix.Factory.zeros(files.length, 2);
//遍历所有文件
for (int i = 0; i < files.length; i++) {
    // 导入文件为矩阵
    Matrix m = Matrix.Factory.importFrom().file(files[i]).asDenseCSV();
    // 在结果矩阵中存储文件名
    result.setAsString(files[i].getName(), i, 0);
    if (m.containsString("Invoice"))
        提取第10行和第3列的值并存储在result中
        result.setAsDouble(m.getAsDouble(10, 3), i, 1);
}
System.out.println("result:\n"+result);

图形矩阵

//图形矩阵
//创建一个以字符串为节点,双精度为边的GraphMatrix
GraphMatrix<String, Double> graphMatrix = new DefaultGraphMatrix<String, Double>();
graphMatrix.setLabel("Interface Inheritance Graph");

//收集UJMP中的所有矩阵接口
Class<?>[] classArray = new Class[] { DenseMatrix.class, DenseMatrix2D.class, Matrix.class, Matrix2D.class,
        SparseMatrix.class, SparseMatrix2D.class, BaseBigDecimalMatrix.class, BigDecimalMatrix2D.class,
        DenseBigDecimalMatrix.class, DenseBigDecimalMatrix2D.class, SparseBigDecimalMatrix.class,
        SparseBigDecimalMatrix2D.class, BigIntegerMatrix.class, BigIntegerMatrix2D.class,
        DenseBigIntegerMatrix.class, DenseBigIntegerMatrix2D.class, SparseBigIntegerMatrix.class,
        SparseBigIntegerMatrix2D.class, BooleanMatrix.class, BooleanMatrix2D.class, DenseBooleanMatrix.class,
        DenseBooleanMatrix2D.class, SparseBooleanMatrix.class, SparseBooleanMatrix2D.class,
        ByteArrayMatrix.class, ByteArrayMatrix2D.class, DenseByteArrayMatrix.class,
        DenseByteArrayMatrix2D.class, SparseByteArrayMatrix.class, SparseByteArrayMatrix2D.class,
        ByteMatrix.class, ByteMatrix2D.class, DenseByteMatrix.class, DenseByteMatrix2D.class,
        SparseByteMatrix.class, SparseByteMatrix2D.class, CharMatrix.class, CharMatrix2D.class,
        DenseCharMatrix.class, DenseCharMatrix2D.class, SparseCharMatrix.class, SparseCharMatrix2D.class,
        DoubleMatrix.class, DoubleMatrix2D.class, DenseDoubleMatrix.class, DenseDoubleMatrix2D.class,
        SparseDoubleMatrix.class, SparseDoubleMatrix2D.class, FloatMatrix.class, FloatMatrix2D.class,
        DenseFloatMatrix.class, DenseFloatMatrix2D.class, SparseFloatMatrix.class, SparseFloatMatrix2D.class,
        GenericMatrix.class, GenericMatrix2D.class, DenseGenericMatrix.class, DenseGenericMatrix2D.class,
        SparseGenericMatrix.class, SparseGenericMatrix2D.class, IntMatrix.class, IntMatrix2D.class,
        DenseIntMatrix.class, DenseIntMatrix2D.class, SparseIntMatrix.class, SparseIntMatrix2D.class,
        LongMatrix.class, LongMatrix2D.class, DenseLongMatrix.class, DenseLongMatrix2D.class,
        SparseLongMatrix.class, SparseLongMatrix2D.class, ObjectMatrix.class, ObjectMatrix2D.class,
        DenseObjectMatrix.class, DenseObjectMatrix2D.class, SparseObjectMatrix.class,
        SparseObjectMatrix2D.class, ShortMatrix.class, ShortMatrix2D.class, DenseShortMatrix.class,
        DenseShortMatrix2D.class, SparseShortMatrix.class, SparseShortMatrix2D.class, StringMatrix.class,
        StringMatrix2D.class, DenseStringMatrix.class, DenseStringMatrix2D.class, SparseStringMatrix.class,
        SparseStringMatrix2D.class };
//了解接口如何相互扩展
for (Class<?> c1 : classArray) {
    for (Class<?> c2 : classArray) {
        if (c2.getSuperclass() == c1) {
            // 当class2扩展class1时加边
            graphMatrix.setEdge(1.0, c1.getSimpleName(), c2.getSimpleName());
        }
        for (Class<?> c3 : c2.getInterfaces()) {
            if (c1 == c3) {
                // 当class2实现class1时加边
                graphMatrix.setEdge(1.0, c1.getSimpleName(), c2.getSimpleName());
            }
        }
    }
}
System.out.println("graphMatrix:\n"+graphMatrix);

曼德布洛特矩阵

//曼德布洛特矩阵
//从Mandelbrot集合创建一个矩阵 
Matrix m = new MandelbrotMatrix();
System.out.println("m:\n"+m);

树矩阵

//树矩阵
//创建一个以字符串为元素的树矩阵 
TreeMatrix<String> treeMatrix = new DefaultTreeMatrix<String>();
//创建数据
treeMatrix.setRoot("root");
treeMatrix.addChild("root", "child1");
treeMatrix.addChild("root", "child2");
treeMatrix.addChild("root", "child3");
treeMatrix.addChild("child1", "subChild11");
treeMatrix.addChild("child1", "subChild12");
treeMatrix.addChild("child1", "subChild13");
treeMatrix.addChild("child2", "subChild21");
treeMatrix.addChild("child3", "subChild31");
treeMatrix.addChild("child3", "subChild32");
treeMatrix.addChild("subChild12", "subSubChild121");
treeMatrix.addChild("subChild12", "subSubChild122");
treeMatrix.addChild("subSubChild122", "subSubSubChild1221");
System.out.println("treeMatrix:\n"+treeMatrix);
//treeMatrix.showGUI();

到了这里,关于矩阵算法之矩阵乘法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA + 图像处理(三)生成3x3像素矩阵

    生成NxN的像素矩阵是对图像进行各类滤波操作的基本前提,本文介绍一种通过bram生成3x3矩阵的方法。 因为本文介绍的是基于bram生成的3x3像素矩阵,所以要先生成两个bram核,用于缓存前两行图像数据 在 IP catalog中选择Block Memory Generator 配置如下 注意这里选择simple dual port RAM,

    2024年04月26日
    浏览(24)
  • <图像处理> 图像插值算法

    图像插值在图像处理中常用于调整图像尺寸或变形,其目标是根据给定像素点周围像素点的信息来预测该像素点的值。 常见的图像插值算法可以分为两类:自适应和非自适应。自适应的方法可以根据插值内容的特点来进行调整,而非自适应的方法对所有像素点都进行相同的处

    2024年02月07日
    浏览(34)
  • Python遥感图像处理应用篇(二十四):Python绘制遥感图像各波段热力图(相关系数矩阵)

    给多光谱遥感图像各个波段绘制热力图,首先需要计算波段之间的相关系数矩阵,而计算遥感图像波段相关系数矩阵有不同的方法,常用的我们可以采用遥感图像处理软件计算,比如ENVI软件就可以计算相关系数矩阵,使用工具箱中的Statistics工具即可进行多种统计运算。 我们

    2023年04月09日
    浏览(32)
  • Python遥感图像处理应用篇(二十七):Python绘制遥感图像各波段热力图(相关系数矩阵)(续)

    续-https://soderayer.blog.csdn.net/article/details/125757807 上一篇中使用csv文件计算的相关系数热力图,本篇我们直接使用遥感图像来计算图像波段之间的相关系数。 实际上,目前已有的软件,如ENVI就可以直接计算图像波段之间的相关系数,该工具计算的是合成波段之间的相关系数。如

    2023年04月17日
    浏览(35)
  • Python遥感图像处理应用篇(二十八):Python绘制遥感图像分类结果混淆矩阵和计算分类精度

    Indians Pines高光谱数据,使用SVM分类方法(选取10%样本量)计算得到的结果。 参考数据: 分类数据:

    2024年02月13日
    浏览(41)
  • 图像预处理算法————灰度化处理

    图像预处理算法适合在FPGA上完成,原理简单且需要快速处理,通常有灰度化、中值、均值滤波等,以及颜色空间转换算法。 灰度图像是一种特殊的彩色图像(R=G=B的彩色图像) 只有一种颜色分量,单通道的0-255 方法:一般有分量法、最大值法、平均值法、加权平均法四种方

    2024年01月17日
    浏览(39)
  • 【图像处理OpenCV(C++版)】——2.2 OpenCV之矩阵运算详解(全)

    前言 : 😊😊😊 欢迎来到本博客 😊😊😊 🌟🌟🌟 本专栏主要结合OpenCV和C++来实现一些基本的图像处理算法并详细解释各参数含义,适用于平时学习、工作快速查询等,随时更新。 😊😊😊 具体食用方式:可以点击本专栏【OpenCV快速查找(更新中)】–搜索你要查询的算子

    2024年02月03日
    浏览(54)
  • 常见图像噪声和常见图像噪声处理算法

    图像噪声按噪声与信号的关系可分为加性噪声和乘性噪声;按照产生原因可分为外部噪声和内部噪声;按照统计特性可分为平稳噪声和非平稳噪声;平稳噪声基于统计后的概率密度函数又可以分为:高斯噪声、泊松噪声、脉冲噪声、瑞利噪声。 1.2基于统计后的概率密度函数

    2024年02月16日
    浏览(30)
  • 【图像处理-图像修复】Criminisi图像修复算法(附matlab代码)

    一个愿意伫立在巨人肩膀上的农民......         Criminisi 图像修复模型 可以同时处理像纹理和卡通信息的一种修复方法,其主要思路是先确定破损区域的边界,寻找边界上的像素点,并以边界点为中心像素点设定一个 7 × 7 、 9 × 9 (默认)或 11 × 11 的区块,利用图片的自

    2024年02月02日
    浏览(29)
  • 图像处理:双边滤波算法

    今天主要是回顾一下双边滤波,我曾经在这篇——图像处理:推导五种滤波算法中推导过它,其中包含了我自己写的草稿图。 目录 双边滤波算法原理 (1)空间域核  (2)值域核 理解双边滤波 空域权重​编辑和值域权重​编辑的意义 Opencv实现双边滤波 双边滤波代码实现

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包