簡體   English   中英

以相反的順序從numpy數組中獲取一些元素

[英]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]

這意味着從原始陣列中選擇陣列,然后將其反轉。

問題

  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]那樣使整個數組反轉。
  2. 是我實施了修復方法,還是這里缺少一些東西?

編輯

理解切片符號一文回答了我的第一個問題,但沒有回答第二個問題。

這是一個稍微優雅的修復程序。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM