numpy简明学习笔记(二)切片、索引、转置、轴对换

数组基本切片

数组切片与列表切片形式上相同,但有重要区别:数组切片得到的是原始数组的视图,对视图也就是切片的任何修改都会直接影响到原始数组;若要避免此情况发生,需对切片进行复制操作。

In [1]: import numpy as np

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

# 获取切片
In [3]: arr1=arr[5:8]

In [4]: arr1
Out[4]: array([6, 7, 8])

# 修改切片内容
In [5]: arr1[1]=99

In [6]: arr1
Out[6]: array([ 6, 99,  8])

# 原始数组被修改
In [7]: arr
Out[7]: array([ 1,  2,  3,  4,  5,  6, 99,  8,  9])

# 获取切片副本
In [8]: arr2=arr[1:4].copy()

# 修改切片副本
In [9]: arr2[:]=88

In [10]: arr2
Out[10]: array([88, 88, 88])

# 原始数组未被修改
In [11]: arr
Out[11]: array([ 1,  2,  3,  4,  5,  6, 99,  8,  9])

多维数组索引

多维数组中,索引位置的元素是索引位置的低一维度数组:

In [15]: arr3d
Out[15]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

# 三维数组索引位置元素为二维数组
In [16]: arr3d[0]
Out[16]: 
array([[1, 2, 3],
       [4, 5, 6]])

# 二维数组arr3d[0]的索引位置元素为一维数组
In [18]: arr3d[0][1]
Out[18]: array([4, 5, 6])

# 以上写法等价于
In [19]: arr3d[0,1]
Out[19]: array([4, 5, 6])

# 注意所得到的所有数组都是原数组的视图,修改后会影响到原数组
In [20]: arr3d[0,1]=99

In [21]: arr3d
Out[21]: 
array([[[ 1,  2,  3],
        [99, 99, 99]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

多维数组切片

关于轴的概念:N维数组[0轴,1轴,2轴…]
0轴代表数组里的下一维度的所有数组,如三维数组的0轴代表里面的所有二维数组,若在0轴进行切片,则根据索引位置得到符合切片条件的二维数组组成的三维数组

In [22]: arr3d=np.random.randn(3,3,3)

In [23]: arr3d
Out[23]: 
array([[[ 1.02094993, -0.25748933,  0.49529658],
        [-0.73540525,  0.03011562, -0.11699791],
        [-0.66396291,  0.47977574, -0.86229023]],

       [[-0.39319381,  0.84935699, -1.72054416],
        [-0.36710115,  0.54590238,  0.12768586],
        [ 0.006033  ,  1.26805717, -0.85041817]],

       [[ 2.23066809, -0.03880021,  0.62391508],
        [-0.51181805,  0.55001299, -0.52990981],
        [ 0.50243183, -1.29463259,  0.2809969 ]]])

# 在0轴选取索引为1的数组,得到一个二维数组
In [24]: arr3d[1]
Out[24]: 
array([[-0.39319381,  0.84935699, -1.72054416],
       [-0.36710115,  0.54590238,  0.12768586],
       [ 0.006033  ,  1.26805717, -0.85041817]])

# 选取整个0轴所有数组,得到一个与原数组相同的三维数组
In [25]: 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值