zoukankan      html  css  js  c++  java
  • Numpy快速入门

    基础知识

    1.概念

    NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在NumPy维度中称为

    eg:3D空间中的点的坐标[1, 2, 1]具有一个轴。该轴有3个元素,所以我们说它的长度为3。在下图所示的例子中,数组有2个轴。第一轴的长度为2,第二轴的长度为3。

    [[ 1., 0., 0.],
    [ 0., 1., 2.]]

    NumPy的数组类被调用ndarray。它也被别名所知 array。
    tips:numpy.array这与标准Python库类不同array.array,后者只处理一维数组并提供较少的功能。

    ndarray对象更重要的属性是:

    • ndarray.ndim - 数组的轴(维度)的个数。
    • ndarray.shape - 数组的维度。对于有 n 行和 m 列的矩阵,shape 将是 (n,m)。因此,shape 元组的长度就是rank或维度的个数 ndim。
    • ndarray.size - 数组元素的总数。这等于 shape 的元素的乘积。
    • ndarray.dtype - 一个描述数组中元素类型的对象。可以使用标准的Python类型创建或指定dtype。另外NumPy提供它自己的类型。例如numpy.int32、numpy.int16和numpy.float64。
    • ndarray.itemsize - 数组中每个元素的字节大小。例如,元素为 float64 类型的数组的 itemsize 为8(=64/8),而 complex32 类型的数组的 itemsize 为4(=32/8)。它等于 ndarray.dtype.itemsize 。
    • ndarray.data - 该缓冲区包含数组的实际元素。

    tips:

    • 1D数组和1D数组的转置形状相同
    import numpy as np
    a = np.array([1,2,3])
    print(a.shape)
    b = a.T
    print(b.shape)
    
    out:
    (3,)
    (3,)
    
    • 二维行向量和列向量形状不同
    a=np.arange(3).reshape(1,-1)
    print(a.shape)
    print(a.T.shape)
    b=np.arange(3).reshape(-1,1)
    print(b.shape)
    
    out:
    (1,3)
    (3,1)
    (3,1)
    

    2.数组创建

    numpy.array

    #数字列表作为参数
     a = np.array([2,3,4])
    #可以将序列的序列转换成二维数组,将序列的序列的序列转换成三维数组等
     b = np.array([(1.5,2,3), (4,5,6)])
    #在创建时显式指定数组的类型
     c = np.array( [ [1,2], [3,4] ], dtype=complex )
    

    numpy.arange & numpy.linspace

    当arange与浮点参数一起使用时,由于有限的浮点精度,通常不可能预测所获得的元素的数量。最好使用linspace函数来接收我们想要的元素数量(num),而不是步长(step)

    numpy.arange(start, stop, step , dtype)
    np.linspace(start, stop, num , endpoint=True, retstep=False, dtype=None)
    
    x = np.arange(10,20,2) 
    #结果:
    [10  12  14  16  18]
    
    a = np.linspace(1,10,10)
    #结果:、
    [ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
    

    numpy.asarray 从已有的数组创建数组

    x =  [1,2,3] 
    a = np.asarray(x)  
    print (a)
    #结果:
    [1 2 3]
    
    x =  [(1,2,3),(4,5)]
    a = np.asarray(x)
    print (a)
    print(a.shape)
    #结果:
    [(1, 2, 3) (4, 5)]
    (2,)
    

    numpy.empty & numpy.zeros & numpy.ones

    创建指定形状的随机数组
    numpy.empty(shape, dtype = float, order = 'C')
    创建由0组成的数组
    numpy.zeros(shape, dtype = float, order = 'C')
    创建由1组成的数组
    numpy.ones(shape, dtype = None, order = 'C')

    3.数组打印

    • 最后一个轴从左到右打印,
    • 倒数第二个从上到下打印,
    • 其余部分也从上到下打印,每个切片用空行分隔。
      然后将一维数组打印为行,将二维数据打印为矩阵,将三维数据打印为矩数组表。

    强制打印完整数组不省略中心部分更改set_printoptions

    import sys
    np.set_printoptions(threshold=sys.maxsize)
    

    4.基本操作

    数组上的算术运算符会应用到元素级别
    乘:A@B 或 A.dot(B)
    += ,*=会直接修改原矩阵数组

    5.索引切片和迭代

    多维的数组每个轴可以有一个索引。这些索引以逗号​​分隔的元组给出b[0:5, 1]
    三个点( ... )表示产生完整索引元组所需的冒号x[4,...,5,:]
    对多维数组进行迭代是相对于第一个轴完成的,想要对数组的每个元素执行操作,使用flat属性

    for row in b:
        print(row)
    #结果:
    [0 1 2 3]
    [10 11 12 13]
    [20 21 22 23]
    [30 31 32 33]
    [40 41 42 43]
    
    for element in b.flat:
        print(element)
    #结果:
    0
    1
    2
    3
    10
    11
    12
    13
    20
    ···
    

    形状操纵

    1.改变数组形状

    ravel() & flatten 将多维数组降为一维

    ravel()返回的是视图,改变元素的值会影响原始数组;
    flatten()返回的是拷贝,改变元素的值不会影响原始数组。

    reshape & resize()

    reshape()返回拷贝
    resize()返回视图

    2.堆叠数组

    np.vstack()纵向堆叠
    np.hstack()横向堆叠
    np.column_stack()将一维数组作为列堆叠到二维数组中

    3.数组拆分

    np.hsplit(ary,indices_or_sections)沿数组的水平轴拆分数组,返回的形状相等的数组的数量

  • 相关阅读:
    Django测试开发-36- xadmin模板中缩略图django-stdimage
    Django测试开发-35- xadmin模板中添加上传文件和图片功能
    Django测试开发-34- xadmin模板中添加action插件
    Django测试开发-33- xadmin模板中添加小组件报错
    Django测试开发-32- xadmin模板使用自定义菜单项
    Django测试开发-31- xadmin模板中choices使用
    序列化模块
    一大群模块
    python基础之内置函数和匿名函数
    python基础之迭代器和生成器
  • 原文地址:https://www.cnblogs.com/centralpark/p/12956180.html
Copyright © 2011-2022 走看看