gpt4 book ai didi

python - 使用 3D 张量的最后一个维度中的索引索引 4D 张量的最后一个维度

转载 作者:行者123 更新时间:2023-11-28 19:10:24 25 4
gpt4 key购买 nike

我需要使用 3D 张量的最后一个维度中的索引来索引 4D 张量的最后一个维度。例如,给定以下张量:

X = array([[[[ 0.14127222,  0.37404611,  0.09612721,  0.19907043,  0.84104371,
0.33678107, 0.03965124, 0.16844736, 0.61240914, 0.02107638],
[ 0.46010377, 0.4302605 , 0.95917015, 0.05052149, 0.96033522,
0.6383985 , 0.24895258, 0.78746404, 0.42848993, 0.16791814]],

[[ 0.04889435, 0.82308922, 0.96655923, 0.48346 , 0.95437383,
0.87187596, 0.68328151, 0.70910435, 0.14809697, 0.73191095],
[ 0.9863605 , 0.93424879, 0.8210592 , 0.60322001, 0.09030777,
0.43904245, 0.90761251, 0.97734195, 0.83937746, 0.4611313 ]]],


[[[ 0.63942727, 0.39519546, 0.96378125, 0.67925937, 0.43680618,
0.51125503, 0.62897664, 0.38485839, 0.62766846, 0.20661218],
[ 0.34816242, 0.0278764 , 0.90386847, 0.82995975, 0.37891653,
0.78402321, 0.15557263, 0.23951166, 0.69553685, 0.65161346]],

[[ 0.82596645, 0.81959286, 0.39348156, 0.23748691, 0.4410078 ,
0.99032742, 0.56643199, 0.00693051, 0.96698697, 0.19360464],
[ 0.06039541, 0.97289256, 0.81413577, 0.15651002, 0.52284394,
0.76748494, 0.47697888, 0.05827109, 0.54494079, 0.95826538]]]])

我想使用以下索引张量从中提取值:

Y = array([[[5, 3],
[9, 0]],

[[6, 5],
[5, 7]]])

获取如下张量:

R = array([[[ 0.33678107,  0.05052149],
[ 0.73191095, 0.9863605 ]],

[[ 0.62897664, 0.78402321],
[ 0.99032742, 0.05827109]]])

我如何在 TensorFlow 中做到这一点?我结合使用 reduce_sum 和 tf.one_hot 解决了这个问题,但这是一个内存密集型操作,需要表示一个热向量的巨大张量。

谢谢。

最佳答案

你需要fancy indexing你的 numpy 数组,即使用列表/数组而不是切片索引到 X 的第一个维度:

>>> import numpy as np
>>> i,j,k = np.ogrid[:2,:2,:2]
>>> X[i,j,k,Y]
array([[[ 0.33678107, 0.05052149],
[ 0.73191095, 0.9863605 ]],

[[ 0.62897664, 0.78402321],
[ 0.99032742, 0.05827109]]])

为了让它不那么容易出现魔数(Magic Number),并利用元组解包:

>>> ijk = np.ogrid[[slice(None,k) for k in Y.shape]]
>>> X[(*ijk),Y]
array([[[ 0.33678107, 0.05052149],
[ 0.73191095, 0.9863605 ]],

[[ 0.62897664, 0.78402321],
[ 0.99032742, 0.05827109]]])

通过将数组传递到 X 进行索引,numpy 将解释四个 (2,2,2,2) 形状的数组,使得 [n1 ,n2,n3,n4]中的每一个元素将一起使用从X中获取对应的元素,结果保留这些索引数组的形状。

关于python - 使用 3D 张量的最后一个维度中的索引索引 4D 张量的最后一个维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41227622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com