Numpy矩阵索引详解

索引符号为"[ ]",对于Numpy中的高维矩阵,只要按照剥洋葱的套路来,“[ ]"是下标索引,也就是说,对相应维度上元素的索引,其大小不超过该维度上元素个数减一。什么意思呢,举例来说。假设我有一个三维矩阵,那么我对该矩阵的索引”[ ]“中不能超过三个对象。第一个对象中取出一个数,作为矩阵第一维上的索引,第二个对象中取出一个数,作为第二维上的索引,以此类推。

>>> a=np.reshape(np.arange(27),(3,3,3))
# 创建了一个3维矩阵a
>>> a
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]]])
>>> a[[1,0],[[1,0],[0,1]],1] 
#对a的索引是三个对象,指明第一维索引的object是一个长度为2的列表,
#指明第二维索引的object是一个2维,第三个索引对象是一个整型数指明了第三维的索引 
array([[13,  1],
       [10,  4]])
>>> a[1,[1,0]]
array([[12, 13, 14],
       [ 9, 10, 11]])
>>> a[[1,0],1]
array([[12, 13, 14],
       [ 3,  4,  5]])
>>> a[1,[1,2],1]
array([13, 16])
>>>

再来解释下前面的说法。a矩阵在第一维上有三个元素(即三个2*2的矩阵),所以,第一个索引对象中的数大小不能超过(3-1=2)。因为矩阵a共有三个维度,所以方括号里不能超过三个对象。

怎么看矩阵的第几维有几个元素呢?很简单,对于第一维,你就看最外一层方括号”[]“里边出现了几个分隔的逗号,a中出现了2个逗号,那么这一维就有(2+1=3)个元素,对于第二维、第三维以同样的方法类推。

那么怎么看最好索引结果的形状呢?

这个也好理解。整体形状是受”[ ]“中维数高的对象约束,完整形状还要收实际索引的元素影响。

比如说,对于这个索引

a[[1,0],[[1,0],[0,1]],1]

它的第二维索引对象是一个2*2的矩阵形式。那么最后返回的结果就是一个以第二维对象形状维原型的矩阵

>>>a[1,[1,0]]
  array([[12, 13, 14],
       [ 9, 10, 11]])

再比如说这个索引,它的形状应该是一个长度维2的一维矩阵,里边的第一个元素是a[1,1],第二个元素是a[1,0]。a[1,1],a[1,0]是一个长度为三的一维矩阵,所以最后的结果就是一个二维的2*3矩阵矩阵。

>>>a[1,[1,0]]
  array([[12, 13, 14],
       [ 9, 10, 11]])

也就是说索引的对象的形状是最后结果的相应低维的形状。还是回到上面这个例子,索引的决定性形状是第一维长度为2,所以最后的结果的第一维长度为2.

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值