zoukankan      html  css  js  c++  java
  • python科学计算库的numpy基础知识,完美抽象多维数组(原创)

    #导入科学计算库
    #起别名避免重名
    import numpy as np

    #小技巧:从外往内看==从左往右看 从内往外看==从右往左看

    #打印版本号
    print(np.version.version) #1.16.2

    #声明一个numpy数组,一层list
    nlist = np.array([1,2,3])
    print(nlist) #[1 2 3]
    #ndim方法用来查看数组的属性--维度
    print(nlist.ndim) #1
    #使用shape属性来打印多维数组的形状,返回一个tuple,个数,/行数,列数
    print(nlist.shape) #(3,)


    #声明一个二维数组,二层list
    nlist_2 = np.array([[1,2,3],[4,5,6]])
    print(nlist_2)
    #[[1 2 3]
    #[4 5 6]]
    print(nlist_2.ndim) #2
    print(nlist_2.shape) #(2, 3)


    #声明一个三维数组,三层list
    nlist3 = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
    print(nlist3)
    # [[[1 2 3]
    # [4 5 6]
    # [7 8 9]]]
    print(nlist3.ndim) #3
    #使用shape属性来打印多维数组的形状,返回一个tuple,个数,/行数,列数
    print(nlist3.shape) #(1, 3, 3)


    #使用size()方法来打印多维数组的元素个数
    print(np.size(nlist)) #3
    print(np.size(nlist_2)) #6

    #打印numpy多维度数组的数据类型
    print(type([1,2,3])) #<class 'list'>
    print(type(nlist)) #<class 'numpy.ndarray'>
    #使用python内置dtype属性来打印多维度数组内部元素的数据类型
    print(type(123)) #<class 'int'>
    print(nlist.dtype) #int32

    #itemsize属性,来打印多维数组中的数据类型大小,字节
    print(nlist.itemsize) #4
    print(nlist_2.itemsize) #4
    print(nlist3.itemsize) #4


    #data属性,用来打印数据缓冲区--buffer---/也就是内存地址/
    print(nlist.data) #<memory at 0x000001AF3F0BEA08>
    print(nlist_2.data) #<memory at 0x000001FB22BF5CF0>
    print(nlist3.data) #<memory at 0x000001FB1A730D68>


    #使用reshape()方法,根据形状反向生成多维数组
    nlist_3 = np.array(range(24)).reshape((3,2,4)) #3个二维数组,2每组2行,4列数
    print(nlist_3)


    #使用浮点--元素类型
    nlist_float = np.array([1.0, 2.0, 3.0])
    print(nlist_float.dtype) #float64

    #使用字符串-元素类型
    nlist_str = np.array(['1','2','3'])
    print(nlist_str.dtype) #<U1


    print(range(20))
    print(type(range(20)))


    nlist_4 = np.array([[[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]]])
    print(nlist_4)
    print(nlist_4.ndim)
    print(nlist_4.shape)
    print(nlist_4.itemsize)
    print(nlist_4.dtype)
    print(np.size(nlist_4))

    nlist_4 = np.array(range(20)).reshape((1,1,4,5))
    print(nlist_4.ndim)

    nlist_2_true = np.array([[True,True,True],[True,True,True],[True,True,True]])
    print(nlist_2_true)

    i = []
    nlist2_true = [ i.append(True) for x in range(20) ]
    print(i)

    nlist_2_true = np.array(range(20)).reshape((1,2,10))
    print(nlist_2_true)
     
     

    #声明一个size为20的四维数组
    nlist_4 = np.array(range(20)).reshape((2,5,1,2))
    print(nlist_4)
    print(nlist_4.ndim)
    print(nlist_4.shape)

    #声明一个三行三列的数组
    nlist_33 = np.array([[1,2,3],[1,2,3],[5,7,8]])
    print(nlist_33)
    print(nlist_33.shape)
    print(nlist_33.ndim)
    print(nlist_33.itemsize) #元素字节
    print(nlist_33.size) #长度
    print(np.size(nlist_33))
    print(np.shape(nlist_33))

    #使用ones()自动生成元素为1的多维数组
    nlist_ones = np.ones((4,4))
    print(nlist_ones)
    print(nlist_ones.dtype) #元素float64

    #使用zeros()来生成元素为0的多维数组
    nlist_zeros = np.zeros((4,4))
    print(nlist_zeros)

    #使用empty()方法来生成随机多维数组,使用第二个参数指定元素类型
    nlist_empty = np.empty([2,2],dtype=np.int)
    print(nlist_empty)
    print(nlist_empty.dtype) #int32


    # numpy把普通list转换为数组
    x = [1,2,3]
    print(type(x))
    nlist = np.asarray(x)
    print(type(nlist))
    print(nlist)


    y = [(1,2,3),(4,5)]
    nlist_y = np.asarray(y)
    print(nlist_y.ndim) #1


    #frombuffer 通过字符串(buffer内存地址)字节切片来生成多维数组
    #b强转byte字节
    my_str = b'Hello World'
    nlist_str = np.frombuffer(my_str,dtype='S1')
    print(nlist_str)


    x = np.array([[1,2],[3,4]])
    print(x)

    #指定axis属性,可以指定当前多维数组的维度
    sum0 = np.sum(x,axis = 0,keepdims=True) #axis = 0/行级/
    print(sum0)

    sum1 = np.sum(x,axis=1,keepdims=True) #axis = 1/列级/
    print(sum1)


    #多维数组赋值
    x = np.array([1,2])
    x[1] = 3
    y = x.copy()
    y[0] = 3
    print(x)



    #维度级的运算
    a = np.array([[1,2],[3,4],[5,6]])
    b = np.array([[11,22],[33,44],[55,66]])

    #vstack()方法---维度一样--- vertical垂直合并
    suma = np.vstack((a,b))
    print(suma)

    #hstack()方法---维度一样--- 横向连纵
    sumb = np.hstack((a,b))
    print(sumb)


    #多维数组调用
    nl = np.array([[1,2],[3,4],[5,6]])
    print(nl[[2]])
    print(nl[0][0])
    print(nl[1][1])
    nl[1,1] = 444
    print(nl)

    #删除方法 delete
    #删除nlist第二行
    print(np.delete(nl,1,axis=0))
    print(np.delete(nl,0,axis=1))



    a=np.arange(0, 20, 5)
    print(a)
    print(a.dtype)

    b=np.arange(0, 3.0, 0.4)
    print(b)
    print(b.dtype)


    #范围区间差 = 形状数的乘积
    a=np.arange(1,5).reshape((2,2))
    b=np.arange(3,7).reshape((2,2))
    print(a)
    print(b)



    # 1、创建一个长度为10的一维全为0的多维数组,然后让第5个元素等于1
    ll = np.zeros((10,))
    print(ll)
    print(ll.ndim)
    print(ll.size)
    ll[4] = 1
    print(ll)

    q1 = np.zeros(shape=10)
    print(q1)
    q1[4] = 1
    print(q1)

    # 2、创建一个每一行都是从0到4的5*5矩阵
    # l_2 = np.array([[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]])
    list_5 = np.array([[range(5)]*5])
    print(list_5)
    l_2 = np.array([ range(5)]*5).reshape(5,5)
    print(l_2)
    print(l_2.ndim) #2维
    print(l_2.shape)


    # 3、假如给定一个3*3的二维数组,如何交换其中两行的元素?

    vv0 = np.random.randint(0,100,size=(2,2))
    print(vv0)
    print(vv0[[1,0]])

    # 4、假如给定一个3*3的二维数组,如何交换其中两行的元素?
    #使用索引
    vv = np.random.randint(0,100,size=(3,3))
    print(vv)
    print(vv[[1,0,2]])
    print(vv[[2,0,1]])
    print(vv[[0,2,1]])


    # 5、原数组为一维数组,内容为从 0 到 100,抽取出所有偶数。
    mm = np.arange(0,101).reshape(101,)
    print(mm)
    print(mm[::2]) #切片,步长

    mm = filter(lambda x:x%2==0, mm)
    # print(np.asarray(list(mm)))
    print(np.array(list(mm)))

    mm = np.array(range(101))
    mm = mm[mm % 2 == 0]
    print(mm)



    names = ['p','y','t']
    ages = [18,29,20]
    print({n:a for n in names for a in ages})
    print({name:age for (name, age) in zip(names,ages)})


    mm = np.arange(12).reshape(2,3,2)
    print(mm)
    print(mm.data)
    print(mm.size)
    print(mm.itemsize)
    print(mm.ndim)
    print(mm.dtype)
  • 相关阅读:
    SSL 数据加密原理简述
    MQTT 协议 部分细节
    ARM汇编--汇编中符号和变量
    Kconfig 配置文件编码规则
    ARM汇编指令-STMFD/LDMFD
    python类属性和对象属性、类的普通方法和静态方法
    ARM汇编---程序获取符号的物理地址
    Spring源码分析:非懒加载的单例Bean初始化前后的一些操作
    Spring源码分析:非懒加载的单例Bean初始化过程(下)
    Spring源码分析:非懒加载的单例Bean初始化过程(上)
  • 原文地址:https://www.cnblogs.com/justblue/p/10482421.html
Copyright © 2011-2022 走看看