设为首页 加入收藏

TOP

Python str、list、numpy分片操作(三)
2018-03-02 06:57:11 】 浏览:391
Tags:Python str list numpy 分片 操作
nbsp;     [ 0.,  0.,  0.,  0.],
      [ 6.,  6.,  6.,  6.]])
>>> arr[[3, -3, -1]]
array([[ 3.,  3.,  3.,  3.],
      [ 5.,  5.,  5.,  5.],
      [ 7.,  7.,  7.,  7.]])


arr[[3, 5, 0, 6]]会索引源数组的第三行、第五行、第零行、第六行,然后组成新的视图返回,而arr[[3, -3, -1]]则会索引第三行、倒数第三行和倒数第一行


我们生成了一个8×4数组,然后传入两个索引数组[1, 5, 7, 2]、 [0, 3, 1, 2],然后我们得到一个一维的数组


>>> arr = np.arange(32).reshape((8, 4))
>>> arr
array([[ 0,  1,  2,  3],
      [ 4,  5,  6,  7],
      [ 8,  9, 10, 11],
      [12, 13, 14, 15],
      [16, 17, 18, 19],
      [20, 21, 22, 23],
      [24, 25, 26, 27],
      [28, 29, 30, 31]])
>>> arr[[1, 5, 7, 2], [0, 3, 1, 2]]
array([ 4, 23, 29, 10])


下面我们分析一下上面的代码究竟发生了什么,第一个索引数组[1, 5, 7, 2],我们获取第一行、第五行、第七行和第二行,然后我们将根据第二个索引数组 [0, 3, 1, 2],获取第一行的第零列、第五行的三列……以此类推,最后,我们获得了一个一维的数组


???然,在有些情况下,我们希望按照不同的顺序获取源数组不同的行,并且还要在获取后,改动原来的列顺序,于是我们可以这样做:


>>> arr[[1, 5, 7, 2]]
array([[ 4,  5,  6,  7],
      [20, 21, 22, 23],
      [28, 29, 30, 31],
      [ 8,  9, 10, 11]])
>>> arr[[1, 5, 7, 2]][:, [2, 1, 3, 0]]
array([[ 6,  5,  7,  4],
      [22, 21, 23, 20],
      [30, 29, 31, 28],
      [10,  9, 11,  8]])
>>> arr[np.ix_([1, 5, 7, 2], [2, 1, 3, 0])]
array([[ 6,  5,  7,  4],
      [22, 21, 23, 20],
      [30, 29, 31, 28],
      [10,  9, 11,  8]])


如上,我们既可以用arr[[1, 5, 7, 2]][:, [2, 1, 3, 0]]这样的方式获取获取不同的行,再改变其中的列顺序,同时也可以用np.ix_函数达到一样的目的,不过需要注意的一点是,花式索引跟分片不一样,它总是将数据复制到新的数组中:


>>> arr1 = arr[np.ix_([1, 5, 7, 2], [2, 1, 3, 0])]
>>> arr1
array([[ 6,  5,  7,  4],
      [22, 21, 23, 20],
      [30, 29, 31, 28],
      [10,  9, 11,  8]])
>>> arr1[1] = 66
>>> arr1
array([[ 6,  5,  7,  4],
      [66, 66, 66, 66],
      [30, 29, 31, 28],
      [10,  9, 11,  8]])
>>> arr
array([[ 0,  1,  2,  3],
      [ 4,  5,  6,  7],
      [ 8,  9, 10, 11],
      [12, 13, 14, 15],
      [16, 17, 18, 19],
      [20, 21, 22, 23],
      [24, 25, 26, 27],
      [28, 29, 30, 31]])


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python中bisect的使用方法 下一篇Python中__str__和__repr__的区别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目