2017-04-05 5 views
1

私は、生成したいベクトルの範囲の下限と上限として機能する2つのnumpy配列を持っています。 arange()が動作することを同様にnumpy配列を境界として使用する代替手段

、Iは、例のように中間部材を生成したい:

lower_boundary = np.array([1,1]) 
upper_boundary = np.array([3,3]) 

expected_result = [[1,1], [1,2], [1,3], [2,1], [2,2], [2,3], [3,1], [3,2], [3,3]] 

結果リストまたは別のnumpyの配列とすることができます。これまでネストされたループを使ってこのシナリオを回避することができましたが、 'lower_boundary'と 'upper_boundary'のディメンションは異なる場合があり、私のアプローチは適用されません。

一般的なシナリオでは、両方の境界は以上、少なくとも 4次元です。

+0

'upper_boundary = np.array([4,3])'の場合、どのような出力が得られますか? – Divakar

+0

その場合: expected_result = [[1,1]、[1,2]、[1,3]、[2,1]、[2,2]、[2,3]、[3,1 ]、[3,2]、[3,3]、[4,3]] – pabloxrl

答えて

4

あなたは、自分の所望の範囲(upper_boundary - lower boundary + 1)のインデックス値の範囲を取得し、ニーズ(reshape(len(upper_boundary),-1))にそれを再形成し、その結果の値にあなたのlower_boundryを追加するためにnp.indiciesを使用することができます。

>>> np.indices(upper_boundary - lower_boundary + 1).reshape(len(upper_boundary),-1).T + lower_boundary 
array([[1, 1], 
     [1, 2], 
     [1, 3], 
     [2, 1], 
     [2, 2], 
     [2, 3], 
     [3, 1], 
     [3, 2], 
     [3, 3]]) 

編集:投稿する前にコードを修正するのを忘れました。このようにする必要があります。 修正のための@Divakarありがとうございました。

+1

正しい/ジェネリックバージョンは次のようなものだと考えてください: 'np.indices(upper_boundary - lower_boundary + 1).reshape(len(upper_boundary) 、-1).T + lower_boundary'。 – Divakar

+0

@Divakar良いキャッチ、私は3,3を使用していた変数の代わりに、それを忘れて忘れてしまった。ありがとうございました。 – umutto

+1

うん、単純なリストのOPの落とし穴:) – Divakar

関連する問題