【发布时间】:2021-08-31 18:50:30
【问题描述】:
我有一个 numpy 数组:
theta = np.random.normal(size = [1000, 30, 80, 10])
我有一个索引数组:
delta = np.empty([1000, 30, 50], dtype = int)
delta[0,:] = np.arange(50) # stand-in for integer indexing
我想使用delta 数组索引theta 数组。也就是说,我想要类似的东西
theta[0,delta[0]]
与delta[0,20,11] 关联的条目将是theta[0,20,delta[0,20,11]]。例如,我想退出行索引。我该怎么办?
理想情况下,此输出的形状为[30,50,10] 或[30*50, 10]。
我现在正在使用: 我现在正在使用:
theta_unravel = np.repeat(np.arange(30), 50)
theta[0,theta_unravel,delta[0].ravel()]
这似乎有效(提供[30 * 50, 10] 结果),但我不知道这是否是一个理想的解决方案。相反,我不知道这是否是最快的解决方案。
【问题讨论】:
-
您的
delta没有意义。它具有形状 (3,)。您是说 (1000,30,50) 形状的索引数组吗?具有theta的最后一个维度的有效值? -
编辑:是的,我现在明白你的意思了。 doh!.现在,
delta中的值是theta的第三轴的整数索引。theta的第二个轴应该由delta的第二个轴上的行来推断。所以,根据关系,delta.shape[0] == theta.shape[0]、delta.shape[1] == theta.shape[1]和delta.max() < theta.shape[2]。 -
顺便说一句,您可以考虑使用
np.empty_like(theta),它会创建一个与theta具有相同形状和数据类型的空数组