zoukankan      html  css  js  c++  java
  • Numpy中matrix()和array()的区别

    matrix() 和 array() 的区别,主要从以下方面说起:

    1. 矩阵生成方式不同

    import numpy as np
     
    a1 = np.array([[1, 2], [3, 4]])
    b1 = np.mat([[1, 2], [3, 4]])
     
    a2 = np.array(([1, 2], [3, 4]))
    b2 = np.mat(([1, 2], [3, 4]))
     
    a3 = np.array(((1,2), (3,4)))
    b3 = np.mat(((1,2), (3,4)))
     
    b4 = np.mat('1 2; 3 4')
     
    print("
    ",a1,"
    ",b1,"
    ",a2,"
    ",b2,"
    ",a3,"
    ",b3,"
    ",b4)

    结果均为:

     [[1 2]
     [3 4]]

    上述变化就是将 “[]” 换成“()”。不同之处在于  b4 内用引号、空格和分号来产生矩阵,这个方法只可以在  matrix() 函数中使用,即b4 = np.mat('1 2; 3 4')。不可以写成的 a4 = np.array('1 2; 3 4') 。

    2. 矩阵性质不同

    matrix()和 array ()后面加上 .T 得到转置。但是matrix()还可以在后面加 .H 得到共轭矩阵, 加 .I 得到逆矩阵, array()就不可以。

    import numpy as np
     
    a1 = np.array([[1, 2], [3, 4]])
    b1 = np.mat([[1, 2], [3, 4]])
     
    print(a1.T)
    print(b1.T)
    [[1 3]
     [2 4]]
    [[1 3]
     [2 4]]

    import numpy as np
    a1 = np.array([[1, 2], [3, 4]])
    print(a1.H)

    AttributeError: 'numpy.ndarray' object has no attribute 'H'

    print(a1.I)

    AttributeError: 'numpy.ndarray' object has no attribute 'I'

    import numpy as np
    b1 = np.mat([[1, 2], [3, 4]])
     
    print(b1.H)
    print(b1.I)

    [[1 3]
     [2 4]]
    [[-2.   1. ]
     [ 1.5 -0.5]]

    3. 在矩阵乘法中的不同

    array()的乘法是矩阵中对应位置的两个数相乘。

    mat()的乘法是矩阵乘法。

    import numpy as np
     
    a1 = np.array([[1, 2], [3, 4]])
    c1 = np.array([[5,6],[7,8]])
     
    b1 = np.mat([[1, 2], [3, 4]])
    d1 = np.mat([[5,6],[7,8]])
     
    print("a1乘c1的结果:",a1*c1)
    print("b1乘d1的结果:",b1*d1)

    a1乘c1的结果: [[ 5 12]
     [21 32]]
    b1乘d1的结果: [[19 22]
     [43 50]]

    array()和mat(),若让他们都遵循矩阵乘法,可以用dot()函数

    print(np.dot(a1,c1))
    print(np.dot(b1,d1))

    [[19 22]
     [43 50]]
    [[19 22]
     [43 50]]

    矩阵平方:array()的平方是矩阵对应位置数的平方。mat()的平方是矩阵乘积。

    print("a1的平方",a1**2)
    print("b1的平方",b1**2)
    a1的平方 [[ 1  4]
     [ 9 16]]
    b1的平方 [[ 7 10]
     [15 22]]

    总结:

    array()乘法:*代表点乘(对应元素相乘),dot()代表矩阵乘。

    mat()乘法:*代表矩阵乘,multiply()代表点乘。

    4. matrix()和array()关于秩的区别

    5. array()和mat()之间的转换

    array()——>mat():np.asmatrix()

    a1 = np.array([[1,2], [3,4]])
    a1
    array([[1, 2],
           [3, 4]])
    a2 = np.asmatrix(a1)
    a2
    matrix([[1, 2],
            [3, 4]])

    mat()——>array():np.asarray()

    b1 = np.mat([[1,2], [3,4]])
    b1
    matrix([[1, 2],
            [3, 4]])
    b2 = np.asarray(b1)
    b2 
    array([[1, 2],
           [3, 4]])

    来自:jeexi

  • 相关阅读:
    timescaledb 几个方便的api
    k8s PersistentVolume hostpath 简单使用
    timescaledb replication 使用
    timesacledb 测试demo数据运行
    conan c&&c++ 包管理工具使用
    graphql-yoga interface && union 使用
    JFrog Artifactory CE c&&c++ 包管理工具
    graphcool-framework 一个基于graphql的后端开发框架
    graphql-yoga 项目简单使用&&集成docker
    nsq 安装试用
  • 原文地址:https://www.cnblogs.com/keye/p/11195428.html
Copyright © 2011-2022 走看看