我正在学习Python,但决定通过重新编写和改进一些旧的基于Java的校园AI项目来进行。
我的项目涉及一种数学运算,基本上是一种离散卷积运算,但没有其中一个函数进行时间反转。
因此,虽然在我的原始Java项目中我只是写了所有代码来执行操作,但由于我现在使用的是Python,并且它有很棒的数学库,如numpy和scipy,所以我想我可以利用现有的卷积函数,如scipy.convolve
。 然而,这需要我先对两个数组之一进行反向处理,以便当scipy.convolve
运行并反转其中一个数组以执行卷积时,它实际上是将该数组还原回去。(我还不知道如何确保正确地预先翻转两个数组之一,使得这两个数组在正向滑动而不是反向滑动,但我认为我应该把这个问题单独问一下。)
与我的Java代码不同,它仅处理一维数据,我希望将这个项目扩展到多维数据。因此,虽然我已经学会了如果我有一个已知维度的numpy数组,例如三维数组a,我可以完全反转数组(或者说获取一个反向的视图,这样速度更快),方法是:
a = a(::-1, ::-1, ::-1)
然而,这需要我对每个维度都有一个
::-1
。我该如何在一个具有任意维度的数组的方法内执行相同的反转,并产生与上述代码相同的结果?
slice(None,None,-1)
是相同的东西。尝试使用包含多个元素的元组进行索引。 - hpauljnp.flip
代码。它构造了一个indexer
元组,其中混合了np.s_[:]
和np.s_[::-1]
(取决于维度参数)。这就是我所建议的。 - hpaulj