我爱编程

Numpy基础(二)

2018-01-17  本文已影响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]])
上一篇下一篇

猜你喜欢

热点阅读