• NumPy-基础索引与切片


    基础索引与切片

    首先你新创建了额一个 ndarray 数组:

    arr = np.arange(10)
    

    和python的列表相似的,你可以通过索引和切片来取值

    print(arr[6]) #索引从0开始
    print(arr[5:8]) #顾头不顾尾
    

    6
    [5 6 7]

    和列表一样,数组里的切片取值也是顾头不顾尾,并且索引是从0开始的。

    重要的一个例子

    arr = np.arange(10)
    piece_of_arr = arr[4:6]
    piece_of_arr[:] = 24
    print(arr)
    

    [ 0 1 2 3 24 24 6 7 8 9]

    是的,区别于Python的内建列表,数组的切片是原数组的视图,也就意味着数据并不是被复制了一份,任何对于仕途的修改都会反映到原数组上。

    相比于其他的数组编程语言都是更为急切的复制数据,由于NumPy被设计成适合处理非常大的数组,所以不会那么轻易的让开发者复制,你可以想想一下如果NumPy持续复制数据会引起多少内存问题。

    但是如果你还是要一份数组切片的拷贝,而不是一份视图的话,就必须显式的复制这个数组,

    比如:arr[5 : 8].copy()

    数组的切片索引

    import numpy as np
    arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(arr1)
    print('-----------')
    print(arr1[:2])   #切片第1行到第2行,每一列的元素都要
    print('-----------')
    print(arr1[:2, 1:])  #切片第1行到第2行,第2列到最后一列
    print('-----------')
    print(arr1[1,:2])   #切片第2行,第1列到第2列的元素
    print('-----------')
    print(arr1[:,:1])  #切片每一行,第一列的元素
    print('-----------')
    arr1[:2, 1:] = 0   #切片第1行到第2行,第2列到最后一列的元素,并把切片结果全都改为0,所以会映射回原数组。
    print(arr1)
    print('-----------')
    

    结果

    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    -----------
    [[1 2 3]
     [4 5 6]]
    -----------
    [[2 3]
     [5 6]]
    -----------
    [4 5]
    -----------
    [[1]
     [4]
     [7]]
    -----------
    [[1 0 0]
     [4 0 0]
     [7 8 9]]
    -----------
    
    
  • 相关阅读:
    [leetcode] 18. 四数之和
    [leetcode] 17. 电话号码的字母组合
    [leetcode] 16. 最接近的三数之和
    [leetcode] 15. 三数之和
    [leetcode] 14. 最长公共前缀
    [leetcode] 13. 罗马数字转整数
    [leetcode] 12. 整数转罗马数字
    [leetcode] 11.盛最多水的容器
    分布式系统中的缓存——笔记整理
    图解HTTP
  • 原文地址:https://www.cnblogs.com/chanyuli/p/11716979.html
Copyright © 2020-2023  润新知