2017-06-22 9 views
1

python/numpy/scipyには、特定の範囲の整数のリストを動的に作成する方法がありますか(指数関数的、線形)のような分布関数では、私たちは3行目の対称バージョンを生成するためにnp.minimumを使用して詐欺のビットを使用することができます何か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

を想像してみてください。 2行目は、3から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]]) 
関連する問題