• NumPy数组与矩阵(一)



    前言

    NumPy是python语言的一个扩展程序库,支持大量的维度数组和矩阵运算,此外也针对数组运算提供了大量的的数学函数库。NumPy是一个运行速度非常快的数学库,主要用于数组计算,包含:

    • 一个强大的N维数组对象ndarray;
    • 广播功能函数;
    • 整合C/C++/Fortran代码的工具;
    • 线性代数、傅里叶变换、随机数生成等功能;
    import numpy as np #使用时要先导入库
    
    • 1

    一、ndarray对象

    ndarray内部由以下内容组成:

    • 一个指向数据(内存或内存映射文件中的一块数据)的指针;
    • 数据类型或的(type),描述在数组中的固定大小值的格子;
    • 一个表示数组形状(shape)的元组,表示各维度大小的元组;
    • 一个跨度单元(stride),其中的整数值得是为了前进到当前维度的下一个需要‘跨过’的字节数;
    numpy.array(object,
    dtype=None,
    copy=True,
    order=None,
    subok=False,
    ndmin=0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    a = np.array([1,2,3,4,5])
    
    • 1
    返回:array([1, 2, 3, 4, 5])
    
    • 1
    data = [[1,2,3,4,5],[1,2,3,4,5]]
    b = np.array(data)
    b.ndim
    
    • 1
    • 2
    • 3
    返回值:
    array([[1, 2, 3, 4, 5],
           [1, 2, 3, 4, 5]])
    2
    
    • 1
    • 2
    • 3
    • 4

    NumPy支持的数据类型比Python内置的类型要多很多,其中部分类型对应为Python内置的类型。

    a = np.array([1,2,3,4,5])
    a.dtype
    
    • 1
    • 2
    返回:dtype('int32')
    
    • 1

    ndarray对象属性:

    属性说明
    ndarray.ndim秩,即轴的数量或维度的数量
    ndarray.shape数组的维度,对于矩阵,n行m列
    ndarray.size数组元素的总个数,相当于shape中n*m
    ndarray. dtypendarray对象中每个元素的大小,以字节为单位
    ndarray.itemsizendarray对象中每个元素的大小,以字节为单位
    ndarray.flagsndarray对象的内存信息
    ndarray.realndarray元素的实部
    ndarray.imagndarray的虚部
    ndarray.data包含实际数组元素的缓冲去,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
    a = np.arange(25, dtype=np.float_).reshape(5,5)
    b = np.array([1,2,3,4,5])
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、创建数组

    1. 0元素数组

    np.zeros(shape, dtype=float, order='C')
    
    • 1
    e = np.zeros(5)
    
    • 1
    返回值:array([0., 0., 0., 0., 0.])
    
    • 1

    2. 1元素数组

    s1 = np.ones(5)
    s2 = np.ones([5,5], dtype=float)
    
    • 1
    • 2
    返回值:
    array([1., 1., 1., 1., 1.])
    array([[1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. arange函数

    numpy.arange(start, stop, step, dtype)
    
    • 1
    arr1 = np.arange(10)
    arr2 = np.arange(-10, 10, 2)
    arr3 = np.arange(-10, 10, 2, dtype=float)
    
    • 1
    • 2
    • 3
    返回值:
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    array([-10,  -8,  -6,  -4,  -2,   0,   2,   4,   6,   8])
    array([-10.,  -8.,  -6.,  -4.,  -2.,   0.,   2.,   4.,   6.,   8.])
    
    • 1
    • 2
    • 3
    • 4

    4. 等差数列数组

    numpy.linspace(start, 
    stop, 
    num=, 
    endpoint=True, 
    retstep=False, 
    dtype=None)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    a1 = np.linspace(1, 5, 6)
    a2 = np.linspace(0, 5, 6, endpoint=False)
    
    • 1
    • 2
    返回值:
    array([1. , 1.8, 2.6, 3.4, 4.2, 5. ])
    array([0., 0.83333333, 1.66666667, 2.5, 3.33333333, 4.16666667])
    
    • 1
    • 2
    • 3

    5. 等比数列数组

    numpy.logspace(start, 
    stop, 
    num=, 
    endpoint=True, 
    base=, 
    dtype=None)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    a = np.logspace(1,10,10,base=2)
    
    • 1
    返回值:
    array([2.,    4.,    8.,   16.,   32.,   64.,  128.,  256.,  512.,  1024.])
    
    • 1
    • 2

    三、数据索引与切片

    1. 索引

    在一维数组中,我们可以通过中括号指定索引获取第i个值(从0开始计数)。
    如果想要同时选择多个项,可以在方括号中传递索引数组,比如u我们获取数组a的第2个和第5个元素,则为a[[1, 4]]。

    a = np.random.randn(6)
    a[2]
    a[-1]
    a[[1, 4]]
    
    • 1
    • 2
    • 3
    • 4
    返回值:
    array([-0.14606223, -0.17107517,  0.69222811,  0.86525335, -0.45140777, 1.02867372])
    0.6922281089515185
    1.0286737226055331
    array([-0.17107517, -0.45140777])
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对于二维数组,则被表示为行和列组成的矩形数组,由两个轴定义,其中轴0由行表示,轴1由列表示。[行索引, 列索引]

    b = np.random.randint(5, size=(2, 4))
    b[0,0]
    b[1,2]
    
    • 1
    • 2
    • 3
    返回值:
    array([[1, 3, 4, 0],
           [3, 3, 2, 4]])
     1
     2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 切片

    a[start:stop:step]
    
    • 1
    c = np.arange(10)
    c[1:6]
    d = np.random.randn(16).reshape(4,4)
    d[0,:] #获取第一行
    d[:,0] #获取第一列
    d[1:3,1:3] #获取第2行至第3行,以及第2列至第3列的矩阵元素
    d[[1,3],1:3] #可以指定索引数组(行或列的索引不是连续的)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    返回值:
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    array([1, 2, 3, 4, 5])
    array([[ 0.28468914,  0.12029439, -1.36153591, -0.70530678],
           [ 1.11107553,  0.66395088,  0.07381654,  0.13541892],
           [-0.34753157, -0.45256391,  0.16406101,  0.53094758],
           [ 0.56547094, -0.82115474,  1.59996863,  0.38750278]])
    array([ 0.28468914,  0.12029439, -1.36153591, -0.70530678])
    array([ 0.28468914,  1.11107553, -0.34753157,  0.56547094])
    array([[ 0.66395088,  0.07381654],
           [-0.45256391,  0.16406101]])
    array([[ 0.66395088,  0.07381654],
           [-0.82115474,  1.59996863]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    【云原生之kubernetes实战】在k8s集群环境下部署Tomcat应用
    Replicate + ngrok云端大模型API实现教程
    学生信息登录系统(下)——判断循环语句(五)(for循环篇)
    windows远程连接linux并实现上传下载文件,不需要额外安装任何软件~
    【Ubuntu虚拟机】
    Linux--socket编程--服务端代码
    Spark bucketing bucket分桶原理和应用
    海龟交易法则我认为该怎么用
    基于qiankun搭建angular为基座vue为子应用的微前端项目
    MATLAB基础应用精讲-【数模应用】神经网络
  • 原文地址:https://blog.csdn.net/suwuzs/article/details/125398594