首页 > 解决方案 > 如何反转未知维度的numpy数组?

问题描述

我只是在学习 python,但决定通过重新编码和改进一些旧的基于 java 的学校 AI 项目来做到这一点。

我的项目涉及一个数学运算,它基本上是一个离散卷积运算,但没有一个函数时间反转。

所以,虽然在我最初的 java 项目中,我只是编写了所有代码来自己进行操作,因为我在 python 中工作,并且它有很棒的数学库,比如 numpy 和 scipy,我想我可以利用现有的卷积像scipy.convolve. 但是,这需要我预先反转两个数组之一,以便在scipy.convolve运行时反转其中一个数组以执行卷积,它实际上是不反转数组。(我也仍然不知道如何确保预先反转两个数组中的右边一个,以便两个数组仍然向前而不是向后滑动,但我想我应该这样问一个单独的问题。)

与只处理一维数据的 java 代码不同,我想将此项目扩展到多维数据。因此,虽然我了解到如果我有一个已知维度的 numpy 数组,例如一个三维数组 a,我可以完全反转数组(或者更确切地说,返回一个反转的视图,这要快得多),通过

a = a(::-1, ::-1, ::-1)

但是,这要求我::-1对每个维度都有一个。如何在与上述代码具有相同结果的任意维度数组的方法中执行相同的反转?

标签: pythonarraysnumpyscipyconvolution

解决方案


您可以使用np.flip. 从文档中:

numpy.flip(m, axis=None)

沿给定轴反转数组中元素的顺序。

数组的形状被保留,但元素被重新排序。

注:与所有位置flip(m)对应。m[::-1,::-1,...,::-1]::-1


推荐阅读