• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

矩阵算法:矩阵乘法

武飞扬头像
李景琰
帮助1

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

矩阵乘法中,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列对应元素乘积之和。

导包

  1.  
    <dependency>
  2.  
    <groupId>org.ujmp</groupId>
  3.  
    <artifactId>ujmp-core</artifactId>
  4.  
    <version>0.3.0</version>
  5.  
    </dependency>

基本运算

矩阵的创建

  1.  
    //创建4×4矩阵
  2.  
    Matrix dense = DenseMatrix.Factory.zeros(4, 4);
  3.  
    //将第2行和第3列的entry设置为值5.0
  4.  
    dense.setAsDouble(5.0, 2, 3);
  5.  
    //设置一些其他值
  6.  
    dense.setAsDouble(1.0, 0, 0);
  7.  
    dense.setAsDouble(3.0, 1, 1);
  8.  
    dense.setAsDouble(4.0, 2, 2);
  9.  
    dense.setAsDouble(-2.0, 3, 3);
  10.  
    dense.setAsDouble(-2.0, 1, 3);
  11.  
    //在控制台上打印最终的矩阵
  12.  
    System.out.println("矩阵dense:\n" dense);
  13.  
     
  14.  
    1.0000 0.0000 0.0000 0.0000
  15.  
    0.0000 3.0000 0.0000 -2.0000
  16.  
    0.0000 0.0000 4.0000 5.0000
  17.  
    0.0000 0.0000 0.0000 -2.0000

矩阵的转置

  1.  
    //矩阵的转置
  2.  
    Matrix transpose = dense.transpose();
  3.  
    System.out.println("矩阵的转置:\n" transpose);
  4.  
     
  5.  
    矩阵的转置:
  6.  
    1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 3.0000 0.0000 0.0000
  8.  
    0.0000 0.0000 4.0000 0.0000
  9.  
    0.0000 -2.0000 5.0000 -2.0000
  1.  
    //再来一个矩阵
  2.  
    Matrix sparse = SparseMatrix.Factory.zeros(4, 4);
  3.  
    sparse.setAsDouble(2.0, 0, 0);
  4.  
    System.out.println("矩阵sparse:\n" sparse);
  5.  
     
  6.  
    矩阵sparse:
  7.  
    2.0000 0.0000 0.0000 0.0000
  8.  
    0.0000 0.0000 0.0000 0.0000
  9.  
    0.0000 0.0000 0.0000 0.0000
  10.  
    0.0000 0.0000 0.0000 0.0000

矩阵的求和

  1.  
    //矩阵的求和
  2.  
    Matrix sum = dense.plus(sparse);
  3.  
    System.out.println("矩阵的求和:\n" sum);
  4.  
     
  5.  
    矩阵的求和:
  6.  
    3.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 3.0000 0.0000 -2.0000
  8.  
    0.0000 0.0000 4.0000 5.0000
  9.  
    0.0000 0.0000 0.0000 -2.0000

矩阵的相减

  1.  
    //矩阵的相减
  2.  
    Matrix difference = dense.minus(sparse);
  3.  
    System.out.println("矩阵的相减:\n" difference);
  4.  
     
  5.  
    矩阵的相减:
  6.  
    -1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 3.0000 0.0000 -2.0000
  8.  
    0.0000 0.0000 4.0000 5.0000
  9.  
    0.0000 0.0000 0.0000 -2.0000

矩阵的乘法

  1.  
    //矩阵的乘法
  2.  
    Matrix matrixProduct = dense.mtimes(sparse);
  3.  
    System.out.println("矩阵的乘法:\n" matrixProduct);
  4.  
     
  5.  
    矩阵的乘法:
  6.  
    2.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 0.0000 0.0000 0.0000
  8.  
    0.0000 0.0000 0.0000 0.0000
  9.  
    0.0000 0.0000 0.0000 0.0000

矩阵的数乘

  1.  
    //矩阵的数乘
  2.  
    Matrix scaled = dense.times(2.0);
  3.  
    System.out.println("矩阵的数乘:\n" scaled);
  4.  
     
  5.  
    矩阵的数乘:
  6.  
    2.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 6.0000 0.0000 -4.0000
  8.  
    0.0000 0.0000 8.0000 10.0000
  9.  
    0.0000 0.0000 0.0000 -4.0000

矩阵的逆

  1.  
    //矩阵的逆
  2.  
    Matrix inverse = dense.inv();
  3.  
    System.out.println("矩阵的逆:\n" inverse);
  4.  
     
  5.  
    矩阵的逆:
  6.  
    1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 0.3333 0.0000 -0.3333
  8.  
    0.0000 0.0000 0.2500 0.6250
  9.  
    -0.0000 -0.0000 -0.0000 -0.5000

矩阵的伪逆矩阵

  1.  
    //矩阵的伪逆矩阵
  2.  
    Matrix pseudoInverse = dense.pinv();
  3.  
    System.out.println("矩阵的伪逆矩阵:\n" pseudoInverse);
  4.  
     
  5.  
    矩阵的伪逆矩阵:
  6.  
    1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 0.3333 0.0000 -0.3333
  8.  
    0.0000 0.0000 0.2500 0.6250
  9.  
    0.0000 0.0000 -0.0000 -0.5000

获取矩阵的行数与列数

  1.  
    //获取矩阵的行数与列数
  2.  
    int rowCount = (int) dense.getRowCount();
  3.  
    System.out.println("矩阵dense的行数:" rowCount);
  4.  
    int columnCount = (int) dense.getColumnCount();
  5.  
    System.out.println("矩阵dense的列数:" columnCount);
  6.  
     
  7.  
    矩阵dense的行数:4
  8.  
    矩阵dense的列数:4

数组转矩阵

  1.  
    //数组转矩阵
  2.  
    int[][] a = {
  3.  
    {1, 2, 3},
  4.  
    {4, 5, 6},
  5.  
    {7, 8, 9},
  6.  
    };
  7.  
    Matrix arr = DenseMatrix.Factory.importFromArray(a);
  8.  
    System.out.println("数组转矩阵:\n" arr);
  9.  
     
  10.  
    数组转矩阵:
  11.  
    1.0000 2.0000 3.0000
  12.  
    4.0000 5.0000 6.0000
  13.  
    7.0000 8.0000 9.0000

矩阵的行列式

  1.  
    //矩阵的行列式
  2.  
    double determinant = dense.det();
  3.  
    System.out.println("矩阵的行列式:" determinant);
  4.  
     
  5.  
    矩阵的行列式:-24.0

矩阵的奇异值

  1.  
    //矩阵的奇异值
  2.  
    Matrix[] singularValueDecomposition = dense.svd();
  3.  
    System.out.println("矩阵的奇异值:\n" Arrays.toString(singularValueDecomposition));
  4.  
     
  5.  
    矩阵的奇异值:
  6.  
    [ 0.0000 0.0000 0.0000 -1.0000
  7.  
    0.3007 -0.9410 0.1553 -0.0000
  8.  
    -0.9222 -0.3284 -0.2041 -0.0000
  9.  
    0.2430 -0.0819 -0.9666 -0.0000
  10.  
    ,
  11.  
        6.8481 0.0000 0.0000 0.0000
  12.  
    0.0000 3.1397 0.0000 0.0000
  13.  
    0.0000 0.0000 1.1162 0.0000
  14.  
    0.0000 0.0000 0.0000 1.0000
  15.  
    ,
  16.  
        0.0000 0.0000 0.0000 -1.0000
  17.  
    0.1318 -0.8991 0.4174 -0.0000
  18.  
    -0.5387 -0.4184 -0.7313 -0.0000
  19.  
    -0.8322 0.1285 0.5395 -0.0000
  20.  
    ]

矩阵特征值

  1.  
    //矩阵特征值
  2.  
    Matrix[] eigenValueDecomposition = dense.eig();
  3.  
    System.out.println("矩阵特征值:\n" Arrays.toString(eigenValueDecomposition));
  4.  
     
  5.  
    矩阵特征值:
  6.  
    [ 1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 1.0000 0.0000 0.4000
  8.  
    0.0000 0.0000 1.0000 -0.8333
  9.  
    0.0000 0.0000 0.0000 1.0000
  10.  
    ,
  11.  
        1.0000 0.0000 0.0000 0.0000
  12.  
    0.0000 3.0000 0.0000 0.0000
  13.  
    0.0000 0.0000 4.0000 0.0000
  14.  
    0.0000 0.0000 0.0000 -2.0000
  15.  
    ]

矩阵LU分解

  1.  
    //矩阵LU分解
  2.  
    Matrix[] luDecomposition = dense.lu();
  3.  
    System.out.println("矩阵LU分解:\n" Arrays.toString(luDecomposition));
  4.  
     
  5.  
    [ 1.0000 0.0000 0.0000 0.0000
  6.  
    0.0000 1.0000 0.0000 0.0000
  7.  
    0.0000 0.0000 1.0000 0.0000
  8.  
    0.0000 0.0000 0.0000 1.0000
  9.  
    ,
  10.  
        1.0000 0.0000 0.0000 0.0000
  11.  
    0.0000 3.0000 0.0000 -2.0000
  12.  
    0.0000 0.0000 4.0000 5.0000
  13.  
    0.0000 0.0000 0.0000 -2.0000
  14.  
    ,
  15.  
        1.0000 0.0000 0.0000 0.0000
  16.  
    0.0000 1.0000 0.0000 0.0000
  17.  
    0.0000 0.0000 1.0000 0.0000
  18.  
    0.0000 0.0000 0.0000 1.0000
  19.  
    ]

矩阵分解向量化

  1.  
    //矩阵分解向量化
  2.  
    Matrix[] qrDecomposition = dense.qr();
  3.  
    System.out.println("矩阵分解向量化:\n" Arrays.toString(qrDecomposition));
  4.  
     
  5.  
    [ -1.0000 0.0000 0.0000 0.0000
  6.  
    0.0000 -1.0000 0.0000 0.0000
  7.  
    0.0000 0.0000 -1.0000 0.0000
  8.  
    0.0000 0.0000 0.0000 -1.0000
  9.  
    ,
  10.  
        -1.0000 0.0000 0.0000 0.0000
  11.  
    0.0000 -3.0000 0.0000 2.0000
  12.  
    0.0000 0.0000 -4.0000 -5.0000
  13.  
    0.0000 0.0000 0.0000 2.0000
  14.  
    ]

矩阵特征值

  1.  
    //矩阵特征值
  2.  
    Matrix choleskyDecomposition = dense.chol();
  3.  
    System.out.println("矩阵特征值:\n" choleskyDecomposition);
  4.  
     
  5.  
    矩阵特征值:
  6.  
    1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 1.7321 0.0000 0.0000
  8.  
    0.0000 0.0000 2.0000 0.0000
  9.  
    0.0000 0.0000 0.0000 0.0000

矩阵的拷贝

选取行selectRows(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝

  1.  
    // 选取行selectRows(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝
  2.  
    Matrix row = dense.selectRows(Calculation.Ret.NEW, 0);
  3.  
    System.out.println("选取行深拷贝:\n" row);
  4.  
     
  5.  
    选取行深拷贝:
  6.  
    1.0000 0.0000 0.0000 0.0000

选取列selectColumns(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝

  1.  
    // 选取列selectColumns(Ret,i) Ret.NEW为深拷贝 Ret.LINK为浅拷贝
  2.  
    Matrix column = dense.selectColumns(Calculation.Ret.NEW, 0);
  3.  
    System.out.println("选取列深拷贝:\n" column);
  4.  
     
  5.  
    选取列深拷贝:
  6.  
    1.0000
  7.  
    0.0000
  8.  
    0.0000
  9.  
    0.0000

按第j列进行排序sortrows(Calculation.Ret.NEW, j, boolean)

  1.  
    // 按第j列进行排序sortrows(Calculation.Ret.NEW, j, boolean)
  2.  
    Matrix order = dense.sortrows(Calculation.Ret.NEW, 1, false);
  3.  
    System.out.println("按第j列进行排序:\n" order);
  4.  
     
  5.  
    按第j列进行排序:
  6.  
    1.0000 0.0000 0.0000 0.0000
  7.  
    0.0000 0.0000 4.0000 5.0000
  8.  
    0.0000 0.0000 0.0000 -2.0000
  9.  
    0.0000 3.0000 0.0000 -2.0000

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

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

矩阵的创建

  1.  
    //创建4×4矩阵
  2.  
    Matrix dense = DenseMatrix.Factory.zeros(4, 4);
  3.  
    System.out.println("dense:\n" dense);
  4.  
     
  5.  
    //用0到1之间的随机值创建矩阵
  6.  
    Matrix rand = Matrix.Factory.rand(100, 10);
  7.  
    System.out.println("rand:\n" rand);
  8.  
     
  9.  
    //创建矩阵与-1和-1之间的随机值
  10.  
    Matrix randn = Matrix.Factory.randn(100, 10);
  11.  
    System.out.println("randn:\n" randn);
  12.  
     
  13.  
    //本地主机矩阵
  14.  
    Matrix localhost = Matrix.Factory.localhostMatrix();
  15.  
    System.out.println("localhost:\n" localhost);
  16.  
     
  17.  
    //大稀疏矩阵
  18.  
    SparseMatrix m1 = SparseMatrix.Factory.zeros(1000000, 500000);
  19.  
    System.out.println("m1:\n" m1);

余弦相似矩阵

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

图像矩阵

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

大稀疏矩阵

  1.  
    //大稀疏矩阵
  2.  
    //创建一个非常大的稀疏矩阵
  3.  
    SparseMatrix m1 = SparseMatrix.Factory.zeros(1000000, 500000);
  4.  
    //设置一些值
  5.  
    m1.setAsDouble(MathUtil.nextGaussian(), 0, 0);
  6.  
    m1.setAsDouble(MathUtil.nextGaussian(), 1, 1);
  7.  
    for (int i = 0; i < 10000; i ) {
  8.  
    m1.setAsDouble(MathUtil.nextGaussian(), MathUtil.nextInteger(0, 1000), MathUtil.nextInteger(0, 1000));
  9.  
    }
  10.  
    System.out.println("m1:\n" m1);
  11.  
    //创建另一个矩阵
  12.  
    SparseMatrix m2 = SparseMatrix.Factory.zeros(3000000, 500000);
  13.  
    m2.setAsDouble(MathUtil.nextGaussian(), 0, 0);
  14.  
    m2.setAsDouble(MathUtil.nextGaussian(), 1, 1);
  15.  
    for (int i = 0; i < 10000; i ) {
  16.  
    m2.setAsDouble(MathUtil.nextGaussian(), MathUtil.nextInteger(0, 1000), MathUtil.nextInteger(0, 1000));
  17.  
    }
  18.  
    System.out.println("m2:\n" m2);
  19.  
    // m2矩阵转置后 与m1矩阵相乘法
  20.  
    Matrix m3 = m1.mtimes(m2.transpose());
  21.  
    System.out.println("m3:\n" m3);

提取Excel数据

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

图形矩阵

  1.  
    //图形矩阵
  2.  
    //创建一个以字符串为节点,双精度为边的GraphMatrix
  3.  
    GraphMatrix<String, Double> graphMatrix = new DefaultGraphMatrix<String, Double>();
  4.  
    graphMatrix.setLabel("Interface Inheritance Graph");
  5.  
     
  6.  
    //收集UJMP中的所有矩阵接口
  7.  
    Class<?>[] classArray = new Class[] { DenseMatrix.class, DenseMatrix2D.class, Matrix.class, Matrix2D.class,
  8.  
    SparseMatrix.class, SparseMatrix2D.class, BaseBigDecimalMatrix.class, BigDecimalMatrix2D.class,
  9.  
    DenseBigDecimalMatrix.class, DenseBigDecimalMatrix2D.class, SparseBigDecimalMatrix.class,
  10.  
    SparseBigDecimalMatrix2D.class, BigIntegerMatrix.class, BigIntegerMatrix2D.class,
  11.  
    DenseBigIntegerMatrix.class, DenseBigIntegerMatrix2D.class, SparseBigIntegerMatrix.class,
  12.  
    SparseBigIntegerMatrix2D.class, BooleanMatrix.class, BooleanMatrix2D.class, DenseBooleanMatrix.class,
  13.  
    DenseBooleanMatrix2D.class, SparseBooleanMatrix.class, SparseBooleanMatrix2D.class,
  14.  
    ByteArrayMatrix.class, ByteArrayMatrix2D.class, DenseByteArrayMatrix.class,
  15.  
    DenseByteArrayMatrix2D.class, SparseByteArrayMatrix.class, SparseByteArrayMatrix2D.class,
  16.  
    ByteMatrix.class, ByteMatrix2D.class, DenseByteMatrix.class, DenseByteMatrix2D.class,
  17.  
    SparseByteMatrix.class, SparseByteMatrix2D.class, CharMatrix.class, CharMatrix2D.class,
  18.  
    DenseCharMatrix.class, DenseCharMatrix2D.class, SparseCharMatrix.class, SparseCharMatrix2D.class,
  19.  
    DoubleMatrix.class, DoubleMatrix2D.class, DenseDoubleMatrix.class, DenseDoubleMatrix2D.class,
  20.  
    SparseDoubleMatrix.class, SparseDoubleMatrix2D.class, FloatMatrix.class, FloatMatrix2D.class,
  21.  
    DenseFloatMatrix.class, DenseFloatMatrix2D.class, SparseFloatMatrix.class, SparseFloatMatrix2D.class,
  22.  
    GenericMatrix.class, GenericMatrix2D.class, DenseGenericMatrix.class, DenseGenericMatrix2D.class,
  23.  
    SparseGenericMatrix.class, SparseGenericMatrix2D.class, IntMatrix.class, IntMatrix2D.class,
  24.  
    DenseIntMatrix.class, DenseIntMatrix2D.class, SparseIntMatrix.class, SparseIntMatrix2D.class,
  25.  
    LongMatrix.class, LongMatrix2D.class, DenseLongMatrix.class, DenseLongMatrix2D.class,
  26.  
    SparseLongMatrix.class, SparseLongMatrix2D.class, ObjectMatrix.class, ObjectMatrix2D.class,
  27.  
    DenseObjectMatrix.class, DenseObjectMatrix2D.class, SparseObjectMatrix.class,
  28.  
    SparseObjectMatrix2D.class, ShortMatrix.class, ShortMatrix2D.class, DenseShortMatrix.class,
  29.  
    DenseShortMatrix2D.class, SparseShortMatrix.class, SparseShortMatrix2D.class, StringMatrix.class,
  30.  
    StringMatrix2D.class, DenseStringMatrix.class, DenseStringMatrix2D.class, SparseStringMatrix.class,
  31.  
    SparseStringMatrix2D.class };
  32.  
    //了解接口如何相互扩展
  33.  
    for (Class<?> c1 : classArray) {
  34.  
    for (Class<?> c2 : classArray) {
  35.  
    if (c2.getSuperclass() == c1) {
  36.  
    // 当class2扩展class1时加边
  37.  
    graphMatrix.setEdge(1.0, c1.getSimpleName(), c2.getSimpleName());
  38.  
    }
  39.  
    for (Class<?> c3 : c2.getInterfaces()) {
  40.  
    if (c1 == c3) {
  41.  
    // 当class2实现class1时加边
  42.  
    graphMatrix.setEdge(1.0, c1.getSimpleName(), c2.getSimpleName());
  43.  
    }
  44.  
    }
  45.  
    }
  46.  
    }
  47.  
    System.out.println("graphMatrix:\n" graphMatrix);

曼德布洛特矩阵

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

树矩阵

  1.  
    //树矩阵
  2.  
    //创建一个以字符串为元素的树矩阵
  3.  
    TreeMatrix<String> treeMatrix = new DefaultTreeMatrix<String>();
  4.  
    //创建数据
  5.  
    treeMatrix.setRoot("root");
  6.  
    treeMatrix.addChild("root", "child1");
  7.  
    treeMatrix.addChild("root", "child2");
  8.  
    treeMatrix.addChild("root", "child3");
  9.  
    treeMatrix.addChild("child1", "subChild11");
  10.  
    treeMatrix.addChild("child1", "subChild12");
  11.  
    treeMatrix.addChild("child1", "subChild13");
  12.  
    treeMatrix.addChild("child2", "subChild21");
  13.  
    treeMatrix.addChild("child3", "subChild31");
  14.  
    treeMatrix.addChild("child3", "subChild32");
  15.  
    treeMatrix.addChild("subChild12", "subSubChild121");
  16.  
    treeMatrix.addChild("subChild12", "subSubChild122");
  17.  
    treeMatrix.addChild("subSubChild122", "subSubSubChild1221");
  18.  
    System.out.println("treeMatrix:\n" treeMatrix);
  19.  
    //treeMatrix.showGUI();

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfcjif
系列文章
更多 icon
同类精品
更多 icon
继续加载