NumPy(二):NumPy创建数组的几种方式np.zeros()/ np.ones() /np.arange()/ np.linspace()/ np.indices()

NumPy创建数组的五种方式

学习链接:https://www.numpy.org.cn/user/basics/creation.html

  1. 从其他Python结构(比如,列表、元组)转换
  2. numpy原生数组的创建,比如arange、ones、zeros等
  3. 从磁盘读取数据,无论是标准格式还是自定义格式
  4. 通过使用字符串或缓冲区从原始字节创建数组
  5. 使用特殊库函数,比如random

在此只介绍前两个。

将Python array-like对象转换为Numpy数组

  • 通常,在Python中排列成array-like结构的数值数据可以通过使用array()函数转换为数组。主要是列表和元组。

  • 例子:

    import numpy as np
    array1 = np.array([1,2,3,4])   # 将列表转换为数组
    array2 = np.array([1, 2, 3, 4])
    array3 = np.array([[1,2.0],[0,0],(1+1j,3.)]) 
    # 将列表和元组转换为数组(mix of list and tuple)
    array4 = np.array([[1.+0.j,2.+0.j],[0.+0.j,0.+0.j],[1.+1.j,3.+0.j]])
    '''
    array1和array2均为:
    array([1, 2, 3, 4])
    
    array3:
    array([[1.+0.j, 2.+0.j],
           [0.+0.j, 0.+0.j],
           [1.+1.j, 3.+0.j]])
           
    array4:
    array([[1.+0.j, 2.+0.j],
           [0.+0.j, 0.+0.j],
           [1.+1.j, 3.+0.j]])
    '''
    

Numpy原生数组的创建

np.zeros(shape)

  • zeros(shape)将创建一个以指定形状用0填充的数组。默认的dtype是float64。

    import numpy as np
    array = np.zeros((2,3))
    
    '''array:
    array([[1,2,3],[4,5,6]])
    '''
    

np.ones(shape)

  • ones(shape)将创建一个以指定形状用1填充的数组。其他方面与zeros相同。

    import numpy as np
    array = np.ones((2,3))
    
    '''array:
    array([[1., 1., 1.],
           [1., 1., 1.]])
    '''
    

np.arange()

  • arange()将创建一个有规律递增或递减的数组。

    array1 = np.arange(10)  # 默认数据类型为int32
    array2 = np.arange(2,10,dtype=np.float)
    array3 = np.arange(0,11,2)
    array4 = np.arange(10,0,-2)
    '''输出结果
    array1:
    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    
    array2:
    array([2., 3., 4., 5., 6., 7., 8., 9.])
    
    array3:
    array([ 0,  2,  4,  6,  8, 10])
    
    array4:
    array([10,  8,  6,  4,  2])'''
    

    np.arange()函数:

    • 一个参数时:np.arange(a),返回一个在区间[0, a)内递增的数组,步长为默认值1。
    • 两个参数时:np.arange(a,b),返回一个在区间[a, b)内递增的数组,步长为默认值1。
    • 三个参数时:np.arange(a,b,c),返回一个在区间[a, b)内递增的数组,步长为c。

np.linspace()

  • linspace()将创建具有指定数量元素的数组,并在指定的开始值和结束值之间平均间隔。

    array1 = np.linspace(1.,4.,6)
    # array1:array([1. , 1.6, 2.2, 2.8, 3.4, 4. ])
    
    array2 = np.linspace(1.,4.,6,endpoint=True)
    # array2:array([1. , 1.6, 2.2, 2.8, 3.4, 4. ])
    
    array3 = np.linspace(1.,4.,6,endpoint=False)
    # array3:array([1. , 1.5, 2. , 2.5, 3. , 3.5])
    # 可以理解为在区间[1., 4.]之间均匀分为7(即num+1)个数据,删除4.返回前六个数据构成的数组。
    

    np.linspace()函数:

    • 语法:np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
    • 返回在 [start, stop] 之间均匀间隔的数据
    • start、stop分别表示开始值和结束值
    • num:生成数组的元素数量,默认为50
    • endpoint:True则包含stop;False则不包含stop。默认endpoint=True
    • retstep:即如果为True则结果会给出数据间隔)
    • dtype:输出数组类型
    • axis:0(默认)或-1

np.indices()

  • indices()返回一个给定形状数组的序号网格索引数组,可以用于提取数组元素或对数组进行切片使用。

    • 语法:np.indices(dimensions, dtype, sparse=False)
    • dimensions:网格的形状(整数序列)
    • dtype:数据类型
    • sparse:返回网格的稀疏表示,而不是密集表示。默认值是False。
    • sparse=False时,返回一个网格索引数组grid.shape = (len(dimensions), ) + tuple(dimensions)。
    • sparse=True时,返回数组的元素
    import numpy as np 
    x = np.arange(20).reshape((5,4))
    dense_grid = np.indices((2,3))                  
    #返回一个2x3网格序列,密集分布,每个行号和列号一一对应,表示一个位置的元素。
    sparse_grid  = np.indices((2,3),sparse= True)   
    #返回一个松散排布的2x3网格的行分布和列分布元组,行号和列号不是一一对应,一个行号对应多个列号。
     
    # 显示错误:indices() got an unexpected keyword argument 'sparse'
    # 原因可能是numpy版本问题,待更新后再尝试
     
    
    print("x:\n",x)
    print("x.shape:",x.shape)
    

    参考文章:

    https://blog.csdn.net/daimashiren/article/details/111127432

    https://vimsky.com/examples/usage/numpy-indices-function-python.html

创建数组时,指定数组元素的类型

  • 创建数组时,通过dtype指定数组元素的类型

  • astype:可以更改当前数组的数据类型

    import numpy as np
    x = np.array([1,2,3,4,5],dtype=np.float32)
    print(x)        # [1. 2. 3. 4. 5.]
    print(x.dtype)  # float32
    print(x*2)      # [ 2.  4.  6.  8. 10.]
    
    y = np.array([1,2,3,4,5])
    y_asarray = np.asarray(y,dtype=np.float32)
    print(y_asarray) # [1. 2. 3. 4. 5.]
    print(y)         # [1 2 3 4 5]
    # np.array与np.asarray,dtype不匹配,所以复制该数组(y)
    
    # astype更改当前数据类型,比如将int改为float32
    y1 = np.array([1,2,3,4,5],dtype=int)
    y2 = y1.astype(np.float32)
    print(y1)  # [1 2 3 4 5]
    print(y2)  # [1. 2. 3. 4. 5.]
    
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值