【发布时间】:2017-07-15 05:49:38
【问题描述】:
numpy rollaxis 函数的行为让我很困惑。 documentation 说:
向后滚动指定轴,直到它位于给定位置。
对于start 参数:
轴滚动直到它位于这个位置之前。
对我来说,这已经有点不一致了。
好的,直接的示例(来自文档):
>>> a = np.ones((3,4,5,6))
>>> np.rollaxis(a, 1, 4).shape
(3, 5, 6, 4)
索引 1 (4) 处的轴向后滚动,直到位于索引 4 之前。
现在,当start 索引小于axis 索引时,我们有这种行为:
>>> np.rollaxis(a, 3, 1).shape
(3, 6, 4, 5)
而不是在索引 1 之前在索引 3 处移动轴,而是在 1 处结束。
这是为什么呢?为什么轴不总是滚动到给定的start 索引?
【问题讨论】:
-
我同意,文档(和观察到的行为)不匹配。此外,文档也没有提到可以使用负索引(如 python 列表索引)来倒数。 GitHub 上似乎至少有一个关于此主题的问题。
-
对应的
transpose输入是否更容易理解?np.transpose(a,[0,2,3,1]).shape和np.transpose(a,[0,3,1,2]).shape -
在第二种情况下,
a.shape[3]在a.shape[1]之前结束,6在4之前结束。在第一种情况下,没有a.shape[4],所以插入在末尾。 -
我不明白滚动轴是什么意思?它说滚动时是否意味着旋转索引数组?