Numpy:使用矩阵作为另一个矩阵的索引来创建张量?

时间:2016-07-23 12:37:28

标签: python numpy matrix

以下代码如何工作?

k = np.array([[ 0.,          0.07142857,  0.14285714],
              [ 0.21428571,  0.28571429,  0.35714286],
              [ 0.42857143,  0.5,         0.57142857],
              [ 0.64285714,  0.71428571,  0.78571429],
              [ 0.85714286,  0.92857143,  1.        ]])
y = np.array([[0, 3, 1, 2],
              [2, 1, 0, 3]])
b = k[y]

形状是:

  
    
      

k形:(5,3)

             

y形状:(2,4)

             

b形状:(2,4,3)

    
  

为什么numpy矩阵会接受另一个矩阵作为其索引,以及如何找到正确的输出?为什么会产生张量呢?

b的输出是

  [[[ 0.          0.07142857  0.14285714]
  [ 0.64285714  0.71428571  0.78571429]
  [ 0.21428571  0.28571429  0.35714286]
  [ 0.42857143  0.5         0.57142857]]

 [[ 0.42857143  0.5         0.57142857]
  [ 0.21428571  0.28571429  0.35714286]
  [ 0.          0.07142857  0.14285714]
  [ 0.64285714  0.71428571  0.78571429]]]

1 个答案:

答案 0 :(得分:4)

这称为 integer array indexing

  

整数数组索引允许选择中的任意项   基于其N维索引的数组。每个整数数组   表示该维度的多个索引。

示例 -

x = array([[ 0,  1,  2],
            [ 3,  4,  5],
            [ 6,  7,  8],
            [ 9, 10, 11]])
rows = np.array([[0, 0],
                  [3, 3]], dtype=np.intp)
columns = np.array([[0, 2],
                     [0, 2]], dtype=np.intp)
x[rows, columns]

输出 -

array([[ 0,  2],
       [ 9, 11]])

在这种情况下,您可以看到我们通过给出元素的“坐标”来选择角元素。如果你试着给一个2d 矩阵它只会评估它 -

x[rows]

输出 -

array([[[ 0,  1,  2],
    [ 0,  1,  2]],

   [[ 9, 10, 11],
    [ 9, 10, 11]]])