2017-08-22 4 views
1

Numpyは非常に自然に要素単位の操作を行います。私はちょうどループのネストされたを作成することができ要素ごとのnumpy関数の引数として(行、列)を追加しますか?

def neighbor_count(arr, row, col): 
hood = arr[row-1:row+1, col-1, col+1] 
return np.sum(hood)-arr[row,col] 

for (i, row) in enumerate(arr[1:-1]): 
for (j, col) in enumerate (row[1:-1]): 
    c = neighbor_count(arr, i+1, j+1) 

しかし、それは諦めと行くような感じしかし、多くの場合、私のような、機能を書くときも、要素の位置を持ちたいです私はC++でどのように働くかに戻る。

賢明なPythonicソリューションはありますか?

+1

おそらく、期待した結果を持つ小さな例を追加する必要があります。たとえば、 'np.random.seed(0);a = np.random.randint(0,5,25).reshape([5、5]) 'そして、その配列を使用して、あなたが期待した結果を達成しようとしていることを説明してください。 – Alexander

+1

お望みですか? 'col-1:col + 1'? 'フード'は 'arr [row、col]'を取り囲む(そしてそれを含む)要素の(3,3)セットであるはずですか? '[1:-1]の目的は、オフ・ザ・エンドでの実行を避けることですか?より速い移動ウィンドウまたは画像畳み込みアプローチがいくつかあります。 – hpaulj

+0

完全なコード、十分な入力と予想される出力を示してください。あなたの質問は、信頼性の高い有用な答えを出すにはあまりにも断片的です。 –

答えて

2

あなたはenumerateと同じように機能しますが、ndarray構造の場合はnumpy.ndenumerateが必要です。

結果の値をどのように組み合わせようとしているのか完全には分かっていないため、特定のユースケースに正確な答えはありませんが、基本的な考え方はこれです。 ndenumerateはイテレータを返すので、あなたがそれに取り組む必要があるために使用しているすべてのitertools機能することを

for (r, c), i in np.ndenumerate(arr): 
    do_something() 

注意。

関連する問題