2017-06-22 17 views
1

的整數列表是否有在Python/numpy的/ SciPy的一種方法,在特定的範圍內動態地創建一個整數的列表,這可以改變,並且在該數字是根據進排序在分佈上,如nomrn(高斯),指數,線性。我想象的東西的Python:如何創建取決於具體分佈

like for range 3: 

[1,2,3] 
[2,1,2] 
[1,2,1] 
[3,2,1] 


for range 4: 

[1,2,3,4] 
[2,1,1,2] 
[1,2,2,1] 
[4,3,2,1] 

for range 5: 

[1,2,3,4,5] 
[2,1,0,1,2] 
[1,2,3,2,1] 
[5,4,3,2,1] 
+0

整數分佈的範圍 - 是的,請參閱'numpy.info(numpy.random)'。有序 - 我沒有意識到,你必須自己寫。 –

+0

更大數字的輸出必須是'range = 7'嗎? – Divakar

回答

1

我們可以使用一點使用np.minimum產生在第三行對稱版本弄虛作假。第二行只是第三行的補充,從3中減去。第一行和最後一行僅是從1開始到n的範圍以及它們的翻轉版本。

因此,我們將有一個方法行堆疊這些行後有2D陣列,像這樣 -

def ranged_arr(n): 
    r = np.arange(n)+1 
    row3 = np.minimum(r,r[::-1]) 
    return np.c_[r, 3-row3, row3, r[::-1]].T 

我們也可以使用np.row_stack做堆疊 -

np.row_stack((r, 3-row3, row3, r[::-1])) 

樣品運行 -

In [106]: ranged_arr(n=3) 
Out[106]: 
array([[1, 2, 3], 
     [2, 1, 2], 
     [1, 2, 1], 
     [3, 2, 1]]) 

In [107]: ranged_arr(n=4) 
Out[107]: 
array([[1, 2, 3, 4], 
     [2, 1, 1, 2], 
     [1, 2, 2, 1], 
     [4, 3, 2, 1]]) 

In [108]: ranged_arr(n=5) 
Out[108]: 
array([[1, 2, 3, 4, 5], 
     [2, 1, 0, 1, 2], 
     [1, 2, 3, 2, 1], 
     [5, 4, 3, 2, 1]]) 
相關問題