Python 以相反的顺序从numpy数组中获取一些元素

Python 以相反的顺序从numpy数组中获取一些元素,python,arrays,numpy,reverse,Python,Arrays,Numpy,Reverse,我需要生成numpy数组,从另一个数组中以相反的顺序获取元素 玩具示例代码 假设我使用以下玩具示例代码: import numpy as np a = np.array([1,2,3,5,8,13]) n = len(a) for i in range(n): print a[n:n-i-2:-1] 我希望最后一次打印是[13 8 5 3 2 1],但是我得到一个空数组[],如下所示: >>> [13] [13 8] [13 8 5] [13 8 5

我需要生成numpy数组,从另一个数组中以相反的顺序获取元素

玩具示例代码 假设我使用以下玩具示例代码:

import numpy as np
a = np.array([1,2,3,5,8,13])
n = len(a)

for i in range(n):
    print a[n:n-i-2:-1]
我希望最后一次打印是[13 8 5 3 2 1],但是我得到一个空数组[],如下所示:

>>> 
[13]
[13  8]
[13  8  5]
[13  8  5  3]
[13  8  5  3  2]
[]
修理 因此,我必须在for循环中为我的代码创建以下修复程序,以获得我所期望的结果

for i in range(n):
    print a[n-i-1:n+1][::-1]
这意味着从原始阵列中选择阵列,然后将其反转

问题 为什么我尝试[6:0:-1]时会得到[13,8,5,3,2],但尝试[6:-1:-1]后会得到一个emtpy数组[]?我希望在尝试[:-1]时将整个数组反转。 我实施的修复方案是正确的,还是我缺少了什么? 编辑
这篇文章回答了我的第一个问题,但没有回答第二个问题。

这里有一个稍微优雅一点的修正

for i in range(n):
    print a[n:-i-2:-1]
甚至更优雅

for i in range(n):
    print a[:-i-2:-1]
都是印刷品

[13]
[13  8]
[13  8  5]
[13  8  5  3]
[13  8  5  3  2]
[13  8  5  3  2  1]

它还演示了负索引从顶部开始计数的规则,这就是当停止索引达到-1时原始循环切换行为的原因。

这里有一个稍微优雅的修复方法

for i in range(n):
    print a[n:-i-2:-1]
甚至更优雅

for i in range(n):
    print a[:-i-2:-1]
都是印刷品

[13]
[13  8]
[13  8  5]
[13  8  5  3]
[13  8  5  3  2]
[13  8  5  3  2  1]

它还演示了负索引从顶部开始计数的规则,这就是当停止索引达到-1时原始循环切换行为的原因。

另一个选项是使用以下代码:

import numpy as np
a = np.array([1,2,3,5,8,13])
n = len(a)

l = range(n)
l[n-1] = None

for i in range(n):
    print a[n:l[n-i-2]:-1]

由于执行[n:None:-1]与[:-1]相同,另一个选项是使用以下代码:

import numpy as np
a = np.array([1,2,3,5,8,13])
n = len(a)

l = range(n)
l[n-1] = None

for i in range(n):
    print a[n:l[n-i-2]:-1]
因为执行[n:None:-1]与执行[:-1]相同

使用列表理解并在一行中获得结果:

import numpy as np

a = np.array([1,2,3,5,8,13])
n = len(a)

# use list comprehension here
[list(a[n:-i-2:-1]) for i in range(n)]
如果您确实需要循环的exclicit,请使用以下命令:

for i in range(n):
    print(a[n:-i-2:-1])
使用列表理解并在一行中获得结果:

import numpy as np

a = np.array([1,2,3,5,8,13])
n = len(a)

# use list comprehension here
[list(a[n:-i-2:-1]) for i in range(n)]
如果您确实需要循环的exclicit,请使用以下命令:

for i in range(n):
    print(a[n:-i-2:-1])

您可能会发现[6:5:-1]会产生什么样的有用的可能的副本?并且-1是本例中最后一个元素索引的缩写,5,所以它应该也会这样做。@CedricZoppolo让我知道我的答案是否有帮助您可能会找到[6:5:-1]的有用的可能副本生成?和-1是本例中最后一个元素的索引5的简写形式,因此它应该也会这样做。@CedricZoppolo让我知道我的答案是否有帮助。这现在是有意义的。