zoukankan      html  css  js  c++  java
  • NumPy切片和索引

    类似于python中的list的切片操作,ndarray的对象也可以通过索引或者切片来操作。

    通过slice函数设置其start stop 及step来切出一个新的数组。

    如对数组a进行切割:

    # 数组切割  slice
    av=np.arange(20);
    aq=slice(5,16,1)
    print(av[aq])

    运行结果:

    [ 5  6  7  8  9 10 11 12 13 14 15]
    
    Process finished with exit code 0

    出来使用slice以为我们也可以使用冒号来分割实现切割

    aq=av[5:16:1]

    输出aq与上面运行结果一样

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

    a = np.arange(10)
    print(a[2:])

    运行结果:

    [2 3 4 5 6 7 8 9]
    
    Process finished with exit code 0

    切片还可以包含省略号... ,主要用来选择列和行如:

    a = np.array([[1,2,3],[3,4,5],[4,5,6]])
    print (a[...,1])   # 第2列元素
    print (a[1,...])   # 第2行元素
    print (a[...,1:])  # 第2列及剩下的所有元素

    运行结果:

    [2 4 5]
    [3 4 5]
    [[2 3]
     [4 5]
     [5 6]]
    
    Process finished with exit code 0

    高级索引

    通过以下实例找出(0,0),(1,1),(0,1)三个元素,其中[[0,1,0],[0,1,1]]就对应三个元素的坐标:

    # 高级索引
    xg=np.array([[1,2],[3,4],[5,6]])
    xy=xg[[0,1,0],[0,1,1]]
    print(xy)

    运行结果:

    [1 4 2]
    
    Process finished with exit code 0

    下边来看下综合运用:

    # 综合运用: ...
    az=np.array([[1,2,3],[4,5,6],[7,8,9]])
    ab=az[1:3,1:3]
    ac=az[1:3,[1,0]]
    ad=az[...,1:]
    print('ab:  ')
    print(ab)
    print('ac:  ')
    print(ac)
    print('ad:  ')
    print(ad)

    运行结果:

    ab:  
    [[5 6]
     [8 9]]
    ac:  
    [[5 4]
     [8 7]]
    ad:  
    [[2 3]
     [5 6]
     [8 9]]
    
    Process finished with exit code 0

    解释: ab的值就是([1,2],[1,2]) 的坐标点  ac的值就是([1,2],[1,0])的坐标点 ad的值就是([0,1,2],[1,2])的坐标点。

    布尔索引

    通过布尔运算也就是比较运算来获取符合条件的元素数组。

    例如对于 x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])

    我i们获取大于6的元素值:print(x[x>6])

    另外~(取补运算符)可以用来过滤NaN

    # 过滤· ~
    ap=np.array([np.nan,3,12,np.nan])
    print(ap[~np.isnan(ap)])

    运行结果:

    [ 3. 12.]
    
    Process finished with exit code 0

    类似的还可以过滤掉非复数元素如:ap[np.iscomplex(ap)

    花式索引

    是利用整数数组来进行索引

    x=np.arange(32).reshape((8,4))
    print (x[[0,3,5],...])

    运行结果:

    [[ 0 1 2 3]
    [12 13 14 15]
    [20 21 22 23]]

    或者使结果倒序改下代码为

    x=np.arange(32).reshape((8,4))
    print (x[[-0,-3,-5],...])

    我们也可以使用np.ix_函数来产生笛卡尔积的映射效果 如下:

    x=np.arange(32).reshape((8,4))
    print (x[np.ix_([1,5,7,2],[0,3,1,2])])

    运行结果:

    [[ 4  7  5  6]
     [20 23 21 22]
     [28 31 29 30]
     [ 8 11  9 10]]
    
    Process finished with exit code 0
  • 相关阅读:
    linux shell 小技能
    Jenkins 2.60.x 2种发送邮件方式
    Linux wget 批量下载
    日语阅读-2-如何看“何々的”的用法
    日语阅读-1-如何看ほう的用法
    [日本语]初级语法
    Python基础
    Python基础(10)
    Python基础(8)
    Python基础(7)
  • 原文地址:https://www.cnblogs.com/supershuai/p/12217508.html
Copyright © 2011-2022 走看看