[英]Get some elements from numpy array in reverse order
我需要生成從另一個數組以相反順序獲取元素的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]
這意味着從原始陣列中選擇陣列,然后將其反轉。
a[6:0:-1]
會得到[13, 8, 5, 3, 2]
13,8,5,3,2 [13, 8, 5, 3, 2]
但是一旦我嘗試a[6:-1:-1]
我會得到一個空數組[]
? 我希望像嘗試a[::-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]
執行a[n:None:-1]
與a[::-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)]
# [[13],
# [13, 8],
# [13, 8, 5],
# [13, 8, 5, 3],
# [13, 8, 5, 3, 2],
# [13, 8, 5, 3, 2, 1]]
如果您確實需要顯式的for循環,請使用以下代碼:
for i in range(n):
print(a[n:-i-2:-1])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.