numpy 几个基础操作(reshape, diag, linSpace, logSpace, ravel, vstack和hstack)

比较简单,直接就能看懂,不做赘述

1:reshape 维度变换

import numpy as np
def Reshape():
    """ 维度变换 """
    nList = np.arange(24)
    print(f'原数据:\n{nList}\n')
    print(f'转化成4*6的矩阵:\n{nList.reshape(4, 6)}\n')
    print(f'转化成  6*自动生成的相应的shape值(此时为4)  的矩阵:\n{nList.reshape(6, -1)}\n')

Reshape()
输出:
# 原数据:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

# 转化成4*6的矩阵:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

# 转化成  6*自动生成的相应的shape值(此时为4)  的矩阵:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]

2:diag 对角线操作

def Diag():
    """ 对角线操作 """
    # 获取矩阵对角线
    nList = np.arange(4, 32).reshape(4, -1)
    print(f'原数据:\n{nList}\n')
    print(f'获取对角线:\n{np.diag(nList)}\n')
    print(f'获取对角线(向上偏移1位):\n{np.diag(nList, 1)}\n')

    # 以一维数组创建矩阵
    nList = 1 + np.arange(5)  # 创建一个0-5的一维数组 并且每位+1
    print(f'以nList为对角线(向上偏移1位 )创建一个矩阵:\n{np.diag(nList, 1)}\n')
    print(f'以nList为对角线(向下偏移2位 )创建一个矩阵:\n{np.diag(nList, -2)}')

    # 参考链接
    # https://blog.csdn.net/qq_35277038/article/details/80766746
    # https://blog.csdn.net/The_Time_Runner/article/details/89918383

Diag()
输出:
# 原数据:
[[ 4  5  6  7  8  9 10]
 [11 12 13 14 15 16 17]
 [18 19 20 21 22 23 24]
 [25 26 27 28 29 30 31]]

# 获取对角线:
[ 4 12 20 28]

#获取对角线(向上偏移1位):
[ 5 13 21 29]

# 以nList为对角线(向上偏移1位 )创建一个矩阵:
[[0 1 0 0 0 0]
 [0 0 2 0 0 0]
 [0 0 0 3 0 0]
 [0 0 0 0 4 0]
 [0 0 0 0 0 5]
 [0 0 0 0 0 0]]

# 以nList为对角线(向下偏移2位 )创建一个矩阵:
[[0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0]
 [1 0 0 0 0 0 0]
 [0 2 0 0 0 0 0]
 [0 0 3 0 0 0 0]
 [0 0 0 4 0 0 0]
 [0 0 0 0 5 0 0]]

3:linspace 等差数列

def LinSpace():
    """ 等差数列 """
    # np.linspace(
    #     start,            起始值
    #     stop,             终止值,如果endpoint为true,该值包含于数列中
    #     num=50,           生成的样本量,默认为50
    #     endpoint=True,    是否包含末尾的值;默认为True
    #     retstep=False,    为True时,生成的数组中会显示间距,反之不
    #     dtype=None        数据类型
    # )
    print(f'创建一个等差数列(值:0-10, 个数:5, 显示间距):\n{np.linspace(0, 10, 5, retstep=True)}')

LinSpace()
输出:
# 创建一个等差数列(值:0-10, 个数:5, 显示间距):
(array([ 0. ,  2.5,  5. ,  7.5, 10. ]), 2.5)

4:logspace 等比数列

def LogSpace():
    """ 等比数列 """
    # np.logspace(
    #     start,            base ** start(指数)
    #     stop,             base ** stop;如果endpoint为true,该值包含于数列中
    #     num=50,           生成的样本量,默认为50
    #     endpoint=True,    是否包含末尾的值;默认为True
    #     base=10.0,        默认底数为10
    #     dtype=None        数据类型
    # )
    print(f'创建一个等比数列(值:2^1-2^10, 个数:20):\n{np.logspace(1, 10, num=20, base=2)}')
    
LogSpace()
输出:
# 创建一个等比数列(值:2^1-2^10, 个数:20):
[   2.            2.77730229    3.85670399    5.3556164     7.43708284
   10.32751358   14.34131354   19.91508143   27.65510059   38.40328703
   53.32876841   74.05505519  102.836637    142.80421347  198.30523421
  275.37679007  382.40229418  531.02338276  737.40622722 1024.        ]

5:ravel 降维

def Ravel():
    """ 降维 """
    # n维降成1维
    # 新建一个三维并降成一维
    print(np.ones((2, 3, 4), dtype=int).ravel())

Ravel()
输出:
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

6:vstack和hstack 纵横合并

def VHStack():
    nList = np.arange(12).reshape(3, -1)
    print(f'nList:\n{nList}')
    nList2 = np.arange(5, 17).reshape(3, -1)
    print(f'nList2:\n{nList2}\n')
    print(f'纵向合并:\n{np.vstack([nList, nList2])}')
    print(f'横向合并:\n{np.hstack([nList, nList2])}')

VHStack()
输出:
# nList:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
# nList2:
[[ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

# 纵向合并:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]
# 横向合并:
[[ 0  1  2  3  5  6  7  8]
 [ 4  5  6  7  9 10 11 12]
 [ 8  9 10 11 13 14 15 16]]
最后附一个参考链接:https://www.jianshu.com/p/ecd3a42edd91

你可能感兴趣的:(numpy,python)