美文网首页
python合道-常规Numpy

python合道-常规Numpy

作者: oopp8 | 来源:发表于2019-03-14 14:41 被阅读0次

    ndarray多维数组

    NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引。
    ndarray 对象是用于存放同类型元素的多维数组。
    ndarray 中的每个元素在内存中都有相同存储大小的区域。
    ndarray 内部由以下内容组成:
    一个指向数据(内存或内存映射文件中的一块数据)的指针。
    数据类型或 dtype,描述在数组中的固定大小值的格子。
    一个表示数组形状(shape)的元组,表示各维度大小的元组。
    一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

    属性 说明
    ndarray.ndim 秩,即轴的数量或维度的数量
    ndarray.shape 数组的维度,对于矩阵,n 行 m 列
    ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
    ndarray.dtype ndarray 对象的元素类型
    ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
    ndarray.flags ndarray 对象的内存信息
    ndarray.real ndarray元素的实部
    ndarray.imag ndarray 元素的虚部
    ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。

    创建数组

    • array()函数,括号内可以是列表、元祖、数组、生成器等
    ar2 = np.array([1,2,3.1415,4])
    ar3 = np.array([[1,2,3],('a','b','c')])
    
    • arange(),类似range(),在给定间隔内返回均匀间隔的值。
    print(np.arange(10.0))# 返回0.0-9.0,浮点型
    print(np.arange(1,5))# 返回1-4左闭右开
    print(np.arange(5.0,12,2))  # 返回5.0-12.0,步长为2
    
    • linspace():返回在间隔[开始,停止]上计算的num个均匀间隔的样本。

    numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
    start:起始值,stop:结束值
    num:生成样本数,默认为50
    endpoint:如果为真,则停止是最后一个样本。否则,不包括在内。默认值为True。
    retstep:如果为真,返回(样本,步骤),其中步长是样本之间的间距 → 输出为一个包含2个元素的元祖,第一个元素为array,第二个为步长实际值

    • zeros()/zeros_like()/ones()/ones_like()

    numpy.zeros(shape, dtype=float, order='C'):返回给定形状和类型的新数组,用零填充。
    shape:数组纬度,二维以上需要用(),且输入参数为整数
    dtype:数据类型,默认numpy.float64
    order:是否在存储器中以C或Fortran连续(按行或列方式)存储多维数据。
    zeros()/zeros_like()一样,只是填充为1

    • eye()

    创建一个正方的N*N的单位矩阵,对角线值为1,其余为0

    NumPy 数据类型

    numpy 支持的数据类型比 Python 内置的类型要多很多,基本上可以和 C 语言的数据类型对应上,其中部分类型对应为 Python 内置的类型。

    名称 描述
    bool 布尔型数据类型(True 或者 False)
    int_ 默认的整数类型(类似于 C 语言中的 long,int32 或 int64)
    intc 与 C 的 int 类型一样,一般是 int32 或 int 64
    intp 用于索引的整数类型(类似于 C 的 ssize_t,一般情况下仍然是 int32 或 int64)
    int8 字节(-128 to 127)
    int16 整数(-32768 to 32767)
    int32 整数(-2147483648 to 2147483647)
    int64 整数(-9223372036854775808 to 9223372036854775807)
    uint8 无符号整数(0 to 255)
    uint16 无符号整数(0 to 65535)
    uint32 无符号整数(0 to 4294967295)
    uint64 无符号整数(0 to 18446744073709551615)
    float_ float64 类型的简写
    float16 半精度浮点数,包括:1 个符号位,5 个指数位,10 个尾数位
    float32 单精度浮点数,包括:1 个符号位,8 个指数位,23 个尾数位
    float64 双精度浮点数,包括:1 个符号位,11 个指数位,52 个尾数位
    complex_ complex128 类型的简写,即 128 位复数
    complex64 复数,表示双 32 位浮点数(实数部分和虚数部分)
    complex128 复数,表示双 64 位浮点数(实数部分和虚数部分)

    Numpy通用函数

    .T方法:转置,例如原shape为(3,4)/(2,3,4),转置结果为(4,3)/(4,3,2) → 所以一维数组转置后结果不变
    numpy.reshape(a, newshape, order='C'):为数组提供新形状,而不更改其数据,所以元素数量需要一致!
    numpy.resize(a, new_shape):返回具有指定形状的新数组,如有必要可重复填充所需数量的元素。
    .T/.reshape()/.resize()都是生成新的数组!

    .copy():方法生成数组及其数据的完整拷贝
    .astype():转换数组类型

    np.hstack(tup):水平(按列顺序)堆叠数组
    np.vstack(tup):垂直(按列顺序)堆叠数组
    np.stack(arrays, axis=0):沿着新轴连接数组的序列,形状必须一样!

    np.hsplit(ary, indices_or_sections):将数组水平(逐列)拆分为多个子数组 → 按列拆分
    np.vsplit(ary, indices_or_sections):将数组垂直(行方向)拆分为多个子数组 → 按行拆

    三角函数:sin()、cos()、tan()。
    术函数包含简单的加减乘除: add(),subtract(),multiply() 和 divide()。
    统计函数:amin() 和 amax()
    排序的方法:sort() 函数返回输入数组的排序副本

    Numpy随机数

    np.random.normal(size=(4,4))#生成一个标准正太分布的4*4样本值

    numpy.random.randint(low, high=None, size=None, dtype='l')#生成一个整数或N维整数数组
    若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数,且high必须大于low
    dtype参数:只能是int类型

    print(np.random.randint(2,size=5))# low=2,size=5 :生成5个[0,2)之间随机整数
    print(np.random.randint(2,6,size=5))# low=2,high=6,size=5:生成5个[2,6)之间随机整数  
    print(np.random.randint(2,size=(2,3)))# low=2,size=(2,3):生成一个2x3整数数组,取数范围:[0,2)随机整数 
    print(np.random.randint(2,6,(2,3)))# low=2,high=6,size=(2,3):生成一个2*3整数数组,取值范围:[2,6)随机整数  
    

    Numpy数据的输入输出

    • 存储/读取数组数据 .npy文件
      np.save('array.npy', ar)
      np.load('array.npy')

    • 存储/读取文本文件
      np.savetxt('array.txt',ar, delimiter=',')
      np.loadtxt('array.txt', delimiter=',')

    相关文章

      网友评论

          本文标题:python合道-常规Numpy

          本文链接:https://www.haomeiwen.com/subject/llrqmqtx.html