• 5、numpy——切片和索引


     1、一维数组

    1.1 一维数组很简单,基本和列表一致。ndarray 数组可以基于 0 - n 的下标进行索引。

      切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

      通过冒号分隔切片参数 start:stop:step 来进行切片操作:

    1 import numpy as np
    2 arr = np.arange(10)  #类似于list的range()
    3 # 通过内置函数slice切片
    4 s = slice(2, 10, 2)
    5 print(arr[s])
    6 # 通过冒号切片参数直接切片
    7 print(arr[2:10:2])

    结果:

    [2 4 6 8]
    [2 4 6 8]

    2.2 冒号 : 的解释:

    如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

     1 >>> import numpy as np
     2 >>> a = np.arange(10)
     3 >>> a
     4 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
     5 >>> a[5]
     6 5
     7 >>> a[5:]
     8 array([5, 6, 7, 8, 9])
     9 >>> a[2:6]
    10 array([2, 3, 4, 5])
    11 >>>

    2.3 列表切片与数组ndarray切片的区别

      区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改)。这也意味着,如果不想更改原始数组,我们需要进行显式的复制,从而得到它的副本(.copy())。

    1 import numpy as np
    2 arr_old = arr.copy()
    3 arr[0:6] = 2
    4 print('arr={}
    arr_old={}'.format(arr,arr_old))

    结果:

    arr=[2 2 2 2 2 2 6 7 8 9]
    arr_old=[0 1 2 3 4 5 6 7 8 9]

     2、二维数组

     二维数组中,各索引位置上的元素不再是标量,而是一维数组

    1 import numpy as np
    2 arr = np.array([[1, 2, 2], [4, 5, 6], [7, 8, 9]])
    3 print(arr, '
    ', arr[1][2])

    结果:

    [[1 2 2]
     [4 5 6]
     [7 8 9]] 
     6

    咱们当做一个平面直角坐标系。

    相当于arr1[x,y],x相当于行数,y相当于列数(必须声明,图中x和y标反了,但不影响理解)。

     3、多维数组

    先说明下reshape()更改形状:

    np.reshape(a,newshape,order='C')

    a:array_like以一个数组为参数。

    newshape:intortupleofints。整数或者元组

    顺便说明下,np.reshape()不更改原数组形状(会生成一个副本)。

    1 import numpy as np
    2 arr1 = np.arange(1, 13)
    3 arr2 = arr1.reshape(2, 2, 3)
    4 print(arr1, arr2)

    结果:

    [ 1  2  3  4  5  6  7  8  9 10 11 12] [[[ 1  2  3]
      [ 4  5  6]]
    
     [[ 7  8  9]
      [10 11 12]]]

     其实多维数组就相当于:

    row * col * 列中列

     

    import numpy as np
    arr1 = np.arange(1, 13)
    arr2 = arr1.reshape(2, 2, 3)
    print(arr2[1][1])
    print(arr2[1][1][0])

    结果:

    [10 11 12]
    10
  • 相关阅读:
    Sqoop详细知识
    数据分析与数据挖掘
    数仓 星形模型与雪花模型 简单理解
    mapreduce多进程与spark多线程比较
    ETL工具总结
    数据仓库概述
    利用 Azure Devops 创建和发布 Nuget 包
    设置 Nuget 本地源、在线私有源、自动构建打包
    简单理解 OAuth 2.0 及资料收集,IdentityServer4 部分源码解析
    asp.net core 健康检查
  • 原文地址:https://www.cnblogs.com/weststar/p/11573141.html
Copyright © 2020-2023  润新知