张量流切片/提取


tensor = array([[
    [ 0.1,  0.8],
    [ 0.1,  0.8],
    [ 0.1,  0.8]],
   [[ 0.9,  0.3],
    [ 0.1,  0.8],
    [ 0.9,  0.3]],
   [[ 0.1,  0.8],
    [ 0.1,  0.8],
    [ 0.9,  0.3]]])
selector = array([
    [0, 0, 1],
    [1, 1, 1],
    [1, 1, 0]])

want = array([
    [0.1 0.1 0.8],
    [0.3 0.8 0.3],
    [0.8 0.8 0.9]
    ])

张量T是NxNxK,选择器是NxN。选择器中的每个元素 v(i,j( 指示:从 T[i,j] 中抓取第 v(i,j(-个元素。

有没有办法实现这一点是numpy或tensorflow?谢谢!

----更新感谢Alok Singhal在Numpy中的回答。如果张量和选择器都是张量流张量,有没有办法做到这一点?

这是一种方法:

>>> i, j = np.ogrid[0:3, 0:3]
>>> i
array([[0],
       [1],
       [2]])
>>> j
array([[0, 1, 2]])
>>> tensor[i, j, selector]
array([[ 0.1,  0.1,  0.8],
       [ 0.3,  0.8,  0.3],
       [ 0.8,  0.8,  0.9]])

相关内容

最新更新