Numpy基础(二)

作者: 诺馨 | 来源:发表于2018-01-17 10:45 被阅读17次
    基本的索引和切片

    数组切片是原始数组的视图,这意味着数组不会被复制,视图上的任何修改都会直接反映到源数据

    In [1]: arr = np.arange(10)
            arr[5:8] = 12
            arr        #arr[5:8]的值不是5,6,7了,而是修改后的12
    Out[1]: array([ 0,  1,  2,  3,  4, 12, 12, 12,  8,  9])
    

    继续,将切片赋值给一个变量,对该变量进行操作,看看源数据如何变化。

    In [2]: arr_slice = arr[5:8]
            arr_slice[1] = 123
            arr
    Out[2]: array([  0,   1,   2,   3,   4,  12, 123,  12,   8,   9])
    

    很明显,结果如我们所料,源数据随切片变化而变化,所以:如果想要得到的是ndarray切片的一份副本而不是视图,就需要显式地进行复制操作,例如arr[5:8].copy()。

    Numpy数组中的元素索引

    对于一个二维数组,各索引位置上的元素不是标量而是一维数组,而三维数组呢,以此类推啦..

    In [3]: arr2d = np.array([[1,2,3], [4,5,6], [7,8,9]])
            arr2d[2]
    Out[3]: array([7, 8, 9])
    

    获取单个元素,比如3,可以为arr2d[0][2],这样有点麻烦对吧,可以传入一个以逗号隔开的索引列表来选取单个元素。即:
    arr2d[0,2],这两种方式是等价的。

    对于三维数组,arr3d[0]是一个2 x 3数组:

    In [4]: arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
            arr3d
    Out[4]: array([[[ 1,  2,  3],
                    [ 4,  5,  6]],
    
                   [[ 7,  8,  9],
                    [10, 11, 12]]])
    
    In [5]: arr3d[0]
    Out[5]: array([[1, 2, 3],
                   [4, 5, 6]])
    

    相关文章

      网友评论

        本文标题:Numpy基础(二)

        本文链接:https://www.haomeiwen.com/subject/tideoxtx.html