2017-11-07 7 views
1

私は次元の数を知っている場合は、言って、3、I 3つのネストされたループで打ち、それ:次元数をハードコーディングせずにND配列のすべての要素を列挙する方法は?

for i in range(A.shape[0]): 
    for j in range(A.shape[1]): 
     for k in range(A.shape[2]): 
      A[i,j,k] = some_formula(i, j, k) 

しかし、私は次元の数がわからない場合は何?各ループのすべてのインデックスを知っている配列を列挙できますか?

+1

'numpy.ndenumerate'? – Divakar

+1

Pythonレベルで配列をループするのではなく、NumPyブロードキャストを使用してください。 – user2357112

+0

'len(A.shape)'は次元数を返します。そして、あなたは手動でA.shape [0]のようなインデックスを手動で書く必要はありません。 2つの方法があります。私はnumpyの方法(@ user2357112)または 'itertools.product'を使用すると思います。 –

答えて

2

あなたの関数ブロードキャストする場合は、numpy.fromfunctionを使用することができます。

B = numpy.fromfunction(some_formula, A.shape, dtype=int) 

あなたの関数がブロードキャストしない、あなたはnumpy.vectorizenumpy.fromfunctionを使用することができますが、あなたの関数が放送されている場合、それははるかに少ない効率的でよりになるだろう場合自然:

B = numpy.fromfunction(numpy.vectorize(some_formula), A.shape, dtype=int) 
関連する問題