Python 的numpy包使用总结

1、array和mat区别

 

Python中的numpy包是一个科学计算包,在进行科学计算时多数情况下都会用到这个包,但是其中的array和mat这两个函数的区别还是要注意。数据的类型很有可能是程序出现bug的一个难以发现的原因(自身教训)

if __name__ == '__main__':
    # 一维
    two = [1, 3, 5, 2, 3, 2]
    two1 = np.array(two)
    print(two)  # [1, 3, 5, 2, 3, 2]  type:list
    print(two1)  # [1 3 5 2 3 2]  type:tuple
    print(two1.shape)  # (6,)
    print(two1.tolist())  # [1, 3, 5, 2, 3, 2]  type:list
    print(len(two1.tolist()))  # 6
    two2 = np.mat(two)
    print(two2)  # [[1 3 5 2 3 2]]  type:tuple
    print(two2.shape)  # (1, 6)
    print(two2.tolist())  # [[1, 3, 5, 2, 3, 2]]  type:list
    print(len(two2.tolist()))  # 1

可以看到array和mat还是有所不同的。

  • array: 将list直接转换成了数组,包括但不限于一维的list
  • mat: 将list中的数据转换成了矩阵

所以在使用命令tolist进行对array转换后可以转换成原来的样子,对mat类型转换后会和原来有所不同。

这里的区别在1维情况下表现的很明显。对于下面的多纬情况没啥差别。

对于多维的list,array和mat基本没有差别:但是在 * 操作时候是有差别的

 # 多维数组
    two = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    two1 = np.array(two)
    print(two)
    '''
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    '''
    print(two1)
    '''
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]
     [13 14 15 16]
     [17 18 19 20]]
    '''
    print(two1.shape)  # (5, 4)
    print(two1.tolist())
    '''
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    '''
    print(len(two1.tolist()))  # 5
    two2 = np.mat(two)
    print(two2)
    '''
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]
     [13 14 15 16]
     [17 18 19 20]]
    '''
    print(two2.shape)  # (5, 4)
    print(two2.tolist())
    '''
    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
    '''
    print(len(two2.tolist()))  # 5

    two3=two1.T # 数组转置
    two4=two2.T # 矩阵转置
    Y=two1 * two1 # 数组相乘:各元素对应相乘
    '''
    [[  1   4   9  16]
     [ 25  36  49  64]
     [ 81 100 121 144]
     [169 196 225 256]
     [289 324 361 400]]
    '''
    #Y1 = np.dot(two1, two1)  # dot()函数是矩阵乘,而*则表示逐个元素相乘; 5x4 和 5x4 矩阵乘报错
    Y1 = np.dot(two1, two1.T) # 可以将two1其转置 然后矩阵乘
    '''
    [[  30   70  110  150  190]
     [  70  174  278  382  486]
     [ 110  278  446  614  782]
     [ 150  382  614  846 1078]
     [ 190  486  782 1078 1374]]
    '''
    Y4 = two2 * two2.T  # 矩阵相乘:等同于 p.dot(two2, two2.T)
    '''
    [[  30   70  110  150  190]
     [  70  174  278  382  486]
     [ 110  278  446  614  782]
     [ 150  382  614  846 1078]
     [ 190  486  782 1078 1374]]
    '''

总结:numpy中array(数组)和mat(矩阵)的区别

matrix是array的分支,matrix和array在很多时候都是通用的,你用哪一个都一样。但这时候,官方建议大家如果两个可以通用,那就选择array,因为array更灵活,速度更快,很多人把二维的array也翻译成矩阵。
但是matrix的优势就是相对简单的运算符号,比如两个矩阵相乘,就是用符号*,但是array相乘不能这么用,得用方法.dot()
array的优势就是不仅仅表示二维,还能表示3、4、5…维,而且在大部分Python程序里,array也是更常用的。
 

dot方法的使用 

参考博客: https://www.cnblogs.com/Shawnyi/p/10370815.html

array(数组)和mat(矩阵)

      X[:,0]就是取矩阵X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素。

       X[:,  m:n]即取矩阵X的所有行中的的第m到n-1列数据,含左不含右。

       X[0,:]就是取矩阵X的第0行的所有元素,X[1,:]取矩阵X的第一行的所有元素。

    print(two1[0,:])
    '''
    [1 2 3 4]
    '''
    print(two2[:,0])
    '''
    [[ 1]
     [ 5]
     [ 9]
     [13]
     [17]]
    '''
发布了110 篇原创文章 · 获赞 22 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/yangshaojun1992/article/details/104384633