Python 以相反的顺序从numpy数组中获取一些元素
我需要生成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
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让我知道我的答案是否有帮助。这现在是有意义的。