【发布时间】:2019-06-05 12:17:31
【问题描述】:
我使用连接任意形状的 numpy 数组以使我的代码更清晰,但是,我似乎很难以 python 式的方式对其进行迭代。
让我们考虑一个 4 维数组 x(因此是 len(x.shape) = 4),并且我想要迭代的索引是 2,我通常使用的天真的解决方案类似于
y = np.array([my_operation(x[:, :, i, :])
for i in range(x.shape[2])])
我正在寻找更具可读性的东西,因为有这么多“:”很烦人,而且 x 的尺寸发生任何变化都需要重写我的部分代码。像魔法一样的东西
y = np.array([my_operation(z) for z in magic_function(x, 2)])
是否有一个 numpy 方法可以让我遍历数组的任意维度?
【问题讨论】:
-
任何轴上的迭代都是次优的。快速编译的
ufuncs提供axis或axes参数,因此您不必显式迭代。有一些“应用...”功能,但它们是便利工具,而不是性能增强器。为了获得更多的通用性,Python 代码往往会很长。因此,您自己的“magic_function”,调整到您自己的可能迭代子集是最佳选择。