从多维数组的每个“列”中选择一个元素

时间:2019-05-16 06:10:37

标签: python numpy

我需要执行多维等效的操作,即从数组的每个“列”中选择一个元素:如果x是数据数组,而idx是索引数组,则{{ 1}}的轴小于idx,并且x的值指定要沿最后一个轴拾取idx的哪个元素。结果应具有与x相同的形状。

这是一个函数,它使用Python循环低效地执行此操作:

idx

问题:是否可以使用花哨索引或使用类似import numpy as np def my_select(x, idx): assert x.shape[:-1] == idx.shape res = np.empty(idx.shape, dtype=x.dtype) for pos, last in np.ndenumerate(idx): res[pos] = x[pos + (last,)] return res 的函数来更有效地做到这一点?

示例:以下示例显示了预期的输出:

np.take()

输出的第一行给出元素(0,0, 0 ),(0,1, 0 )和(0,2, 0 >>> x = np.arange(2 * 3 * 4).reshape(2, 3, 4) >>> idx = np.array([[0, 0, 0], [1, 1, 1]]) >>> x array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]) >>> my_select(x, idx) array([[ 0, 4, 8], [13, 17, 21]]) 的strong>),结果的第二行给出元素(1、0, 1 ),(1、1, 1 )和( 1、2, 1 )。前两个轴的索引仅迭代所有可能的值,最后一个索引(粗体)取自x

0 个答案:

没有答案