簡體   English   中英

從數組中提取特定元素以創建范圍

[英]Extract specific elements from array to create ranges

我想從數組中提取非常具體的元素來創建各種范圍。

例如,

ranges = np.arange(0, 525, 25)
#array([  0,  25,  50,  75, 100, 125, 150, 175, 200, 225, 250, 275, 300, 325, 350, 375, 400, 425, 450, 475, 500])

我想創建 output 這樣的范圍-

0 50
75 125
150 200
225 275
300 350
375 425
450 500

我知道如果我想將每個數字提取到一個范圍內,我可以寫這樣的東西-

for start, end in zip(ranges[:-1], ranges[1:]):
    print(start, end)

這將給出結果-

0 50
25 75
50 100
75 125
100 150
125 175
150 200
175 225
200 250
225 275
250 300
275 325
300 350
325 375
350 400
375 425
400 450
425 475

但是,我不確定如何從數組中提取所有其他元素。

無需在這里堆放任何東西,也無需創建比現有緩沖區更多的緩沖區。 幾個重塑和簡單的索引應該可以解決問題。

請注意,您正在獲取三個序列中的第一個和最后一個元素。 這意味着您可以將數組截斷為 3 的倍數,重新調整為具有 N 行的三個元素,然后簡單地提取每個元素的第一個和最后一個。

k = 3
ranges = np.arange(0, 525, 25)
ranges[:ranges.size - ranges.size % k].reshape(-1, k)[:, ::k - 1]

以下是單線的細分:

trimmed_to_multiple = ranges[:ranges.size - ranges.size % k]
reshaped_to_n_by_k = trimmed_to_multiple.reshape(-1, k)
first_and_last_column_only = reshaped_to_n_by_k[:, ::k - 1]

您可以創建兩個范圍,然后將它們stack在列軸上:

np.stack((np.arange(0, 500, 75), np.arange(50, 550, 75)), axis=1)

廣義:

>>> start = 50
>>> step = 75
>>> end = 550
>>> np.stack((np.arange(0, end - start, step), np.arange(start, end, step)), axis=1)
array([[  0,  50],
       [ 75, 125],
       [150, 200],
       [225, 275],
       [300, 350],
       [375, 425],
       [450, 500]])
lowestMidPoint, highestMidPoint = 25, 475
ranges = [[midpoint-25, midpoint+25] for midpoint in range(lowestMidPoint,highestMidPoint+1,75)]

將為您提供 arrays 數組的結果。 然后,您只需調用np.array(ranges)即可在 numpy 中獲取它。

要回答您的問題“我如何獲取數組中的所有其他條目?”...如果您有一個 numpy 數組

out = 
  1 2
  3 4
  5 6

out按如下方式切片

stride = 2
out[::stride,:]

每隔一行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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