使用probs是什么意思[range(6),y]

时间:2016-03-22 15:24:15

标签: python numpy

python 2d numpy-array probs的形状为(6,3),另一个1d数组y的形状为(6,)probs[range(6),y]的含义是什么?

例如:

import numpy as np

probs=np.array([[  1.,   2.,   3.],
                [  1.,   3.,   5.],
                [  1. ,  4.,   7.],
                [  1.,   5.,   9.],
                [  1.,   6.,  11.],
                [  1.,   7.,  13.]])

y= [0, 0, 1, 1, 2, 2]

probs[range(6),y]

这里使用哪条规则?

1 个答案:

答案 0 :(得分:1)

规则很简单,它将range(6)的第一个元素作为x坐标,将y的第一个元素作为第一个元素的y坐标。两个索引的第二个元素用于第二个元素,依此类推。

numpy indexing docs中也解释了这一点。

要解释一下,假设您有一个3x3阵列:

import numpy as np
array = np.arange(9).reshape(3,3)
array
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

要获取0,01,2元素,您可以使用整数索引:

array[0,0]
# 0
array[1,2]
# 5

如果你想要两者,你可以将这两者结合起来:

array[[0,1],[0,2]]
# array([0, 5])

因此,使用[range(6),y]创建一个包含以下元素的新数组:

# [0, 0], [1, 0], [2, 1], [3, 1], [4, 2], [5, 2]

因为此上下文中的range(6)等同于[0,1,2,3,4,5]