zoukankan      html  css  js  c++  java
  • Ndarray 数组

    NumPy Ndarray 介绍

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。

    ndarray 对象是用于存放同类型元素的多维数组

    ndarray 中的每个元素在内存中都有相同存储大小的区域

    ndarray 内部由以下内容组成:

    • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
    • 数据类型或 dtype,描述在数组中的固定大小值的格子。
    • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
    • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

    NumPy 创建数组

    利用 array() 函数创建数组

    array1 = [1,2,3]
    m = np.array(array1)
    print(m)
    
    array2 = [[1,2,3],[4,5,6]]
    n = np.array(array2)
    print(n)
    

    利用arange()和linspace()函数创建 “等差数列” 数组

    np.arange(start,end,step):start和end表示起始位置,step表示步长,用于创建表示等差数列的一维数组,注意得到的结果数组不包含终值

    np.linspace(start,end,num):start和end表示起始位置,num表示个数,用于创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值

    array1 = np.arange(1, 15)
    array2 = np.arange(1, 15, 3)
    
    # [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14]
    # [ 1  4  7 10 13]
    

    endpoint=True表示是包含终止值(默认),endpoint=False表示不包含终止值

    type=np.float64指定创建的数组的数据类型默认是float64,你也可以设置为dtype=np.np.int32

    arr1 = np.linspace(1, 20, num=5, endpoint=False, dtype=np.float64)
    arr2 = np.linspace(1, 20, num=5, endpoint=False, dtype=np.int32)
    arr3 = np.linspace(1, 20, num=5, endpoint=True, dtype=np.float64)
    arr4 = np.linspace(1, 20, num=5, endpoint=True, dtype=np.int32)
    
    # [ 1.   4.8  8.6 12.4 16.2]
    # [ 1  4  8 12 16]
    # [ 1.    5.75 10.5  15.25 20.  ]
    # [ 1  5 10 15 20] 
    

    创建 “指定数值填充” 的数组

    np.zeros((3, 5)))
    np.ones((3, 5))
    np.full((3, 5), 8)
    numpy.zeros(shape, dtype = float, order = 'C')
    

    shape 形状

    dtype 数据类型,可选(float, int) 默认为float

    order 'C' 用于 C 的行数组,或者 'F' 用于 FORTRAN 的列数组

    复制已有数组,创建指定数值的数组

    如果我们知道一个数组的形状,想要创建一个和它形状相同的数组

    • np.zeros_like():复制已有数组形状,创建一个全0数组;
    • np.ones_like():复制已有数组形状,创建一个全1数组;
    • np.full_like():复制已有数组形状,创建一个指定数值的数组;

    单位矩阵和对角矩阵

    创建单位矩阵,有 np.eye(x)np.identity(x) 这两个函数

    np.eye(3)
    np.identity(3)
    
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    

    创建对角矩阵,利用 np.diag() 函数

    np.diag([1, 2, 3, 4, 7])
    
    [[1 0 0 0 0]
     [0 2 0 0 0]
     [0 0 3 0 0]
     [0 0 0 4 0]
     [0 0 0 0 7]]
    

    logspace()函数创建 “等比数列” 数组

    arange() 和 linspace() 函数,创建等差数列

    利用 logspace() 函数,创建等比数列

    np.logspace(start, stop, num=50, endpoint=True, base=, dtype=None)

    start和stop表示指数次幂,base表示底数(默认是10),也就是公比;

    endpoint=True表示是包含终止值(默认),endpoint=False表示不包含终止值

    np.logspace(1, 6, 3, base=2, dtype=int)
    # [ 2 11 64]
    # [2的1次方,2的2次方,2的3次方 ... 2的6次方] 均匀的分成 3 个数,得到 [ 2 11 64]
    

    NumPy Ndarray 数组属性

    res = np.array([[1,2,3],[4,5,6]])
    print(res.shape)  # (2, 3)  数组形状
    print(res.size)  # 6  数组中元素个数
    print(res.dtype)  # int32  数组中元素数据类型
    print(res.ndim)  # 2  数组的维度
    

    数组列表相互转换

    列表转数组,直接将一个列表传入array()函数中

    list1 = list(range(10))
    array1 = np.array(list1)
    print(array1)
    # [0 1 2 3 4 5 6 7 8 9]
    

    数组转列表,调用数组的tolist()方法

    array1 = np.arange(10)
    list1 = array1.tolist()
    print(list1)
    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    数组的数据类型转换

    numpy中的数据类型转换,不要使用x.dtype修改元素的数据类型,最好用x.astype()这种方式

    numpy中常用的的数据类型

    numpy 中常用的数据类型,int类型float类型

    但是一般都不是直接写 int 和 float 的,而是像 int32、float64 这样的写法

    在计算机中,最底层执行的是0和1组成的二进制指令,一个0或者1就代表着一个二进制位,又叫"比特位(bit)",这里的32或64就是代表二进制位。

    根据计算机的换算单位,1字节=8二进制位,即"1bytes=8bit",因此,根据这种换算:"32bit-4bytes"、"64bit=8bytes"。

    int32 说明了该数组中每个元素的数据类型是 int32,同时通过 32 我们又可以知道,该数组中每一个元素的存储空间是 4 字节,那么这个范围大致是 [-2147483648,2147483647]

    使用astype()函数修改数组的数据类型

    a = np.array([1.3,2.6,6.4])
    print(a.dtype)
    a2 = a.astype(np.float32)
    print(a2.dtype)
    
    # float64
    # float32
    

    改变ndarray数组的形状

    使用numpy中的reshape()函数修改数组对象

    a = np.arange(10).reshape(2, 5)
    a2 = np.reshape(a, (5, 2))
    print(a2)
    
    # [[0 1]
    #  [2 3]
    #  [4 5]
    #  [6 7]
    #  [8 9]]
    

    使用数组对象的reshape()方法修改数组对象

    a = np.arange(10).reshape(2, 5)
    print(a)
    
    # [[0 1 2 3 4]
    #  [5 6 7 8 9]]
    

    改变数组形状时,如果维度大于1,可以将“最后一个维度”设置为-1

    a = np.arange(6).reshape(2, 3)
    a2 = np.arange(6).reshape(2, -1)
    print(a)
    print(a2)
    
    # [[0 1 2]
    #  [3 4 5]]
    # [[0 1 2]
    #  [3 4 5]]
    

    可以这样做的原因在于,当你指明了前面的维度,最后一个维度会根据数组元素个数和前面的维度数,自动计算出最后一个维度的维度数,也就是说【维度一 * 维度二 * … * 维度N = 元素个数】

    NumPy 数组的属性T可用于获取矩阵的转置

    a = np.arange(1, 7).reshape(3, 2)
    print(a)
    print(a.T) 
    
    # [[1 2]
    #  [3 4]
    #  [5 6]]
    # [[1 3 5]
    #  [2 4 6]]
    

  • 相关阅读:
    C# using
    Spring框架
    is
    pycharm破解197
    python安装197
    python3.7.0安装197
    centos7 minimal 安装mysql197
    centos7 minimal 安装 &网络配置197
    ruby安装卸载197
    redis安装 卸载 启动 关闭197
  • 原文地址:https://www.cnblogs.com/kai-/p/14823634.html
Copyright © 2011-2022 走看看