2

numpyの配列には、scipyというラベルが付けられ、コンポーネントラベルが付けられています。Python - ラベル付き多次元配列に関数を適用する

import numpy 
from scipy import ndimage 

a = numpy.zeros((8,8), dtype=numpy.int) 
a[1,1] = a[1,2] = a[2,1] = a[2,2] = a[3,1] = a[3,2] = 1 
a[5,5] = a[5,6] = a[6,5] = a[6,6] = a[7,5] = a[7,6] = 1 
lbl, numpatches = ndimage.label(a) 

ラベル付き配列内のすべてのラベルに対してカスタム関数(特定の値の計算)を適用したいとします。 ndimage代数関数インスタンスの場合と同様の :

ndimage.sum(a,lbl,range(1,numpatches+1)) 

(このケースでは、私に各ラベル[6,6]の値の数を返します。)

これを行う方法はありますか?

答えて

2

あなたはここ

[func(a[lbl == i]) for i in index] 

とほぼ同等である、ndimage.labeled_comprehensionに任意の関数を渡すことができるがndimage.sum(a,lbl,range(1,numpatches+1))labeled_comprehension換算で:

import numpy as np 
from scipy import ndimage 

a = np.zeros((8,8), dtype=np.int) 
a[1,1] = a[1,2] = a[2,1] = a[2,2] = a[3,1] = a[3,2] = 1 
a[5,5] = a[5,6] = a[6,5] = a[6,6] = a[7,5] = a[7,6] = 1 
lbl, numpatches = ndimage.label(a) 

def func(x): 
    return x.sum() 

print(ndimage.labeled_comprehension(a, lbl, index=range(1, numpatches+1), 
            func=func, out_dtype='float', default=None)) 
# [6 6]