zoukankan      html  css  js  c++  java
  • Python3NumPy——ndarray对象

    Python3NumPy——ndarray对象

    1.前沿

    • 推荐导入语法:import numpy as np
    • NumPy中使用ndarray对象表示数组,ndarray是NumPy库的核心对象

    2.创建ndarray对象

    • 函数array()传递Python序列创建数组
    import numpy as np #导入Numpy库,给出别名为np
    x1 = np.array([1,2,3,4,5,6])
    print('-'*20 + '第EX1个例子' + '-'*20)
    print('EX1=>传递参数为单列表,创建的1维数组x1为: {}'.format(x1))
    print('EX1=>x1的形状为元组类型: {}'.format(x1.shape))
    print('-'*20 + '第EX2个例子' + '-'*20)
    x2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print('EX2=>传递参数为嵌套列表,创建的2维数组x2为: 
    {}'.format(x2))
    print('EX2=>x2的形状为元组类型: {}'.format(x2.shape))
    print('-'*20 + '第EX3个例子' + '-'*20)
    x3 = np.array((7,8,9,10))
    print('EX3=>传递参数为单元组,创建的1维数组x3为: {}'.format(x3))
    print('EX3=>x3的形状为元组类型: {}'.format(x3.shape))
    print('-'*20 + 'End' + '-'*20)
    --------------------第EX1个例子--------------------
    EX1=>传递参数为单列表,创建的1维数组x1为: [1 2 3 4 5 6]
    EX1=>x1的形状为元组类型: (6,)
    --------------------第EX2个例子--------------------
    EX2=>传递参数为嵌套列表,创建的2维数组x2为:
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    EX2=>x2的形状为元组类型: (3, 3)
    --------------------第EX3个例子--------------------
    EX3=>传递参数为单元组,创建的1维数组x3为: [ 7 8 9 10]
    EX3=>x3的形状为元组类型: (4,)
    --------------------End--------------------
    

    Note:补充知识=》修改数组形状,修改后的形状后,其元素在内存中的位置并未改变;只是改变了轴的长度。

    X = np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])#X传递参数为嵌套列表,创建的2维
    print('原型状数组X为(3行,4列): 
    {}'.format(X))
    print('X的形状为元组类型(0轴长度为3,1轴为4): {}'.format(X.shape))
    print('-'*20 + '第一次修改X的形状' + '-'*20)
    X.shape = 4, 3
    print('第一次修改形状后数组X为(4行,3列): 
    {}'.format(X))
    print('-'*20 + '第二次修改X的形状' + '-'*20)
    X.shape = 2, -1 # -1表示自动计算1轴的长度,结果为6
    print('第二次修改形状后数组X为(2行,6列): 
    {}'.format(X))
    print('='*50)
    print('-'*20 + '指定形状数组:reshape()方法' + '-'*20)
    a = np.array([1,2,3,4,5,6,7,8,9])
    print('原型状数组a为(1行,9列): 
    {}'.format(a))
    a1 = a.reshape((3,3))
    print('变换为3X3数组a1为(3行,3列): 
    {}'.format(a1))
    print('再次打印a数组为: 
    {}'.format(a))
    a[0] = 100
    print('修改a的第一个元素的值为100后a为: 
    {}'.format(a))
    print('修改a的第一个元素的值为100后a1为: 
    {}'.format(a1))
    print('表明:a和a1共享存储空间')
    原型状数组X为(3行,4列):
    [[ 1 2 3 4]
     [ 5 6 7 8]
     [ 7 8 9 10]]
    X的形状为元组类型(0轴长度为3,1轴为4): (3, 4)
    --------------------第一次修改X的形状--------------------
    第一次修改形状后数组X为(4行,3列):
    [[ 1 2 3]
     [ 4 5 6]
     [ 7 8 7]
     [ 8 9 10]]
    --------------------第二次修改X的形状--------------------
    第二次修改形状后数组X为(2行,6列):
    [[ 1 2 3 4 5 6]
     [ 7 8 7 8 9 10]]
    ==================================================
    --------------------指定形状数组:reshape()方法--------------------
    原型状数组a为(1行,9列):
    [1 2 3 4 5 6 7 8 9]
    变换为3X3数组a1为(3行,3列):
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    再次打印a数组为:
    [1 2 3 4 5 6 7 8 9]
    修改a的第一个元素的值为100后a为:
    [100 2 3 4 5 6 7 8 9]
    修改a的第一个元素的值为100后a1为:
    [[100 2 3]
     [ 4 5 6]
     [ 7 8 9]]
    表明:a和a1共享存储空间
    

    3.元素类型

    • 采用dtype属性获取
    • 创建ndarray对象时,可以指定元素类型
    • 元素数据类型转换方法:astype()
    xi = np.array([1,2,3,4],dtype=np.int32) #指定整形
    print('xi的类型为: {}'.format(xi.dtype))
    print('-'*20 + 'End' + '-'*20)
    xf = np.array([1,2,3,4],dtype=np.float) #指定浮点型
    print('xf的类型为: {}'.format(xf.dtype))
    print('-'*20 + 'End' + '-'*20)
    xc = np.array([1,2,3,4],dtype=np.complex) #指定为复数型
    print('xc的类型为: {}'.format(xc.dtype))
    print('-'*20 + 'End' + '-'*20)
    xi的类型为: int32
    --------------------End--------------------
    xf的类型为: float64
    --------------------End--------------------
    xc的类型为: complex128
    --------------------End--------------------
    print("numpy中去重的数据类型:")
    set(np.typeDict.values())
    numpy中去重的数据类型:
    
    {numpy.uint16,
     numpy.complex64,
     numpy.complex128,
     numpy.timedelta64,
     numpy.int32,
     numpy.uint8,
     numpy.float64,
     numpy.void,
     numpy.int64,
     numpy.uint32,
     numpy.object_,
     numpy.int8,
     numpy.int32,
     numpy.uint64,
     numpy.int16,
     numpy.uint32,
     numpy.str_,
     numpy.datetime64,
     numpy.float32,
     numpy.bool_,
     numpy.float64,
     numpy.complex128,
     numpy.float16,
     numpy.bytes_}
    print('xi.dtype的为: {}'.format(xi.dtype))
    print('xi.dtype.type的为: {}'.format(xi.dtype.type))
    xi.dtype的为: int32
    xi.dtype.type的为: <class 'numpy.int32'>
    print('-'*20 + '数据类型导致的溢出问题' + '-'*20)
    xi16 = np.int16(200)
    print('xi16 X xi16的结果溢出,计算出现错误: {}'.format(xi16*xi16))
    --------------------数据类型导致的溢出问题--------------------
    xi16 X xi16的结果溢出,计算出现错误: -25536
    
    C:Anaconda3libsite-packagesipykernel\__main__.py:3: RuntimeWarning: overflow encountered in short_scalars
      app.launch_new_instance()

    NumPy的数值对象的运算速度比Python的内置类型的运算速度慢很多,如果程序中需要大量地单个数值运算,避免使用NumPy的数值对象。

    print('-'*20 + '数据类型导致的时间问题' + '-'*20)
    v1 = 3.14
    v2 = np.float64(v1)
    %timeit v1*v1
    %timeit v2*v2
    --------------------数据类型导致的时间问题--------------------
    10000000 loops, best of 3: 46.6 ns per loop
    The slowest run took 35.90 times longer than the fastest. This could mean that an intermediate result is being cached.
    10000000 loops, best of 3: 129 ns per loop
    t1 = np.array((1,2,3,4,5), dtype=np.float)
    print('转换数据类型为int32')
    t11 = t1.astype(np.int32)
    print(t11)
    print('-'*40)
    t2 = np.array((1,2,3,4), dtype=np.complex)
    print('转换数据类型为complex64')
    t22 = t2.astype(np.complex64)
    print(t22)
    转换数据类型为int32
    [1 2 3 4 5]
    ----------------------------------------
    转换数据类型为complex64
    [1.+0.j 2.+0.j 3.+0.j 4.+0.j]
  • 相关阅读:
    Spring----BeanPostProcessor
    spring lifeCycle
    lambda表达式
    mybatis ----SqlSessionManager
    带权随机
    Protocol Buffers学习笔记
    Java的Lambda表达式
    mysql之group_concat函数
    Java排序之归并排序
    Java排序之计数排序
  • 原文地址:https://www.cnblogs.com/brightyuxl/p/8977075.html
Copyright © 2011-2022 走看看