• python学习--numpy的数组


    numpy中的数组类型为ndarry

    创建

    # -*- coding: utf-8 -*-
    import numpy as np
    
    #用列表或元组创建
    a = np.array([[1,2,3],[4,5,6]])
    b = np.array([1,2],dtype=complex)
    
    #类似内置函数range
    c = np.arange(24).reshape(2,3,4)
    
    #等差,等比数组
    d = np.linspace(0,1,10,endpoint=False)
    print np.logspace(0,4,3,base=2)
    
    #创建特殊数组
    print np.zeros((2,3))
    print np.zeros_like(a)
    print np.ones((2,3),dtype=np.int16) #全1
    print np.empty((2,3))
    print np.eye(3) #单位阵
    
    #从字符串,函数,文件等创建
    s ='abcdef'
    print np.fromstring(s,dtype=np.int8)
    print np.fromfunction(lambda i,j:(i+1)*(j+1), (9,9))
    #fromfile从二进制文件中创建,tofile写入文件
    
    #从文件创建
    np.savetxt('123.txt',a) #存为文本
    e = np.loadtxt('123.txt')
    
    #文件操作还有savez,save,load
    np.save('c.npy', c) #存为二进制,后缀不可变
    c = np.load('c.npy')
    print c
    
    np.savez('c.npz', c,d) #存储多个数组
    d = np.load('c.npz')
    print d['arr_0'], d['arr_1']
    
    c.tofile('c.bin')
    c = np.fromfile('c.bin',dtype=np.int32) #读出来是一维的
    print c
    
    #创建随机数组
    print np.random.random((2,3))
    
    #结构体数组
    persontype = np.dtype({'names':['name','age','weight'], 'formats':['S30','i','f']}, align=True)
    f = np.array([('zhang',32,75.5), ('wang',24,65.2)], dtype=persontype)
    print f
    print f['name']
    print f[0]['age']

    属性

    # -*- coding: utf-8 -*-
    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    
    print a.ndim #维数
    print a.shape #(3,2) 每个维数的长度
    print a.size #元素个数
    print a.dtype #float64,元素类型.所有类型可通过set(np.typeDict.values())查看
    print a.itemsize #每个元素的字节数
    print a.data #缓冲区地址

    使用

    # -*- coding: utf-8 -*-
    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    
    print a[1][2]
    index = (1,2)
    print a[index]
    print a[0:2,1]
    print a[:,[0,2]] #取第0和2列
    print a[1]
    print a[...,1]
    
    for row in a:
        print row
    for element in a.flat:
        print element
    
    b = a>4
    a[b] = 0
    print a

    操作

    # -*- coding: utf-8 -*-
    import numpy as np
    
    a = np.array([[1,2,3],[4,5,6]])
    
    #改变大小
    a.ravel() #展平为1维数组
    print a
    a.shape = (3,2) #元素在内存中的位置并没有改变
    print a.reshape(2,-1) #a不动,返回改变形状后的数组,-1对应的维自动计算
    a.resize((2,3))
    print a
    
    #组合
    b = np.floor(10*np.random.random((2,3)))
    print np.vstack((a,b))
    print np.hstack((a,b))
    #类似还有concatenate, r_, c_
    
    #分割
    print np.hsplit(a,3)
    
    #复制
    c = a #c跟a完全相同
    print c is a
    c = a.view() #c跟a虽是不同数组,但c跟a公用数据.
    c = a.copy() #深拷贝,c跟a完全不同
    print a.repeat(3,axis=0)
    
    a = np.array([1,2,3,4,5])
    b = np.array([2,4,7])
    ax,bx = np.ix_(a,b)
    print ax.shape
    print ax*bx
    
    #产生能快速广播的数组
    x,y = np.ogrid[:1:4j, :1:3j] #和arange类似,三个产生是开始值,结束值,步长,步长为虚数表示长度
    print x
    print y
    print 2*x + y
    x,y = np.mgrid[:1:4j, :1:3j] #与ogrid不同的是,它返回的是广播后的数组
    print x
    print y

    运算

    # -*- coding: utf-8 -*-
    import numpy as np
    
    a = np.array([[4,3],[2,1]])
    b = np.array([[1,1],[0,1]])
    
    #逻辑运算
    print np.logical_or(a==b, a<b)
    print np.any(a==b)
    print np.all(a>b)
    
    #对每个元素操作
    print a<3
    print a**2
    print a*b
    a *= 3
    np.add(a,b,a)
    print a
    
    #通用函数
    print np.exp(a)
    print np.sort(a) #对每行排序
    '''
    当使用ufunc函数对两个数组进行计算时,ufunc函数会对这两个数组的对应元素进行计算,因此它要求这两个数组的形状相同。如果形状不同,会进行如下的广播(broadcasting)处理:
    1. 让所有输入数组都向其中维数最多的数组看齐,shape属性中不足的部分都通过在前面加1补齐。
    2. 输出数组的shape属性是输入数组的shape属性的各个轴上的最大值。
    3. 如果输入数组的某个轴的长度为1或与输出数组的对应轴的长度相同时,这个数组能够用来计算,否则出错。
    4. 当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值。
    '''
    #将a视为1维数组
    print a.max() #a.func()等同于np.func(a)
    print a.argmin()
    print a.sum()
    #以下4个为统计函数
    print a.mean()
    print a.var()
    print a.std()
    print np.cov(a)
    #也可以对指定的维操作,例如
    print a.sum(axis=0)
    print np.add.reduce(a,axis=1)
    print np.add.accumulate(a,axis=1) #于reduce不同的是它保留中间结果
    
    print np.inner(a,a) #计算两个数组最后1维的内积
    print np.multiply.outer([1,2,3,4,5],[2,3,4]) #先使第一个参数的shape变为(5,1),再multiply,再执行squeeze剔除长度为1的轴

    线性代数

    # -*- coding: utf-8 -*-
    import numpy as np
    import numpy.matlib
    
    a = np.array([[1.,2.],[3.,4.]])
    b = np.array([[1,1],[0,1]])
    
    print a.transpose()
    print np.trace(a)
    print a.trace()
    print np.linalg.det(a)
    print np.linalg.eig(a) #特征向量和特征值
    print np.dot(a,b) #矩阵乘法
    #解方程组
    y = np.array([[5.],[7,]])
    print np.linalg.solve(a,y)
    #linalg更多函数见http://docs.scipy.org/doc/numpy/reference/routines.linalg.html
    
    #矩阵类继承自2维数组
    A = np.mat(a)
    print A.T
    print A.I
    X = np.matrix('5 6; 7 8').T
    print A*X
    print A[:,1] #跟数组不一样,这里切片的结果还是矩阵
    print numpy.matlib.identity(3,dtype=int) #单位阵

     

  • 相关阅读:
    如何画出高级感的曼哈顿图,Manhattan++工具介绍
    Failed to open .vcf.gz: could not load index
    Mouse Genome Informatics(MGI)数据库介绍
    JZ落选跟我们有什么关系
    GenTree:基因进化和功能分析
    对性染色体进行关联分析
    媲美GWAS Catalog,囊括45万人数据,778个表型,3千万个位点的公共数据库:GeneATLAS
    DDD理论学习系列(11)-- 工厂
    RabbitMQ知多少
    DDD理论学习系列(10)-- 聚合
  • 原文地址:https://www.cnblogs.com/saieuler/p/3366594.html
Copyright © 2020-2023  润新知