Bir matristeki en sık öğe öğesini komşu değerlerine ve kendisine göre hesaplamalıyım. Ne istediğimi hesaplamak için kullandığım bir generic_filter işlev buldum. Yani burada ben bir 2d dizisi3d dizilim üzerinde ndimage.generic_function
arr = np.array([
[1, 2, 4],
[5, 6, 7],
[2, 4, 4]
])
def most_frequent(arr):
def most_frequent(val):
return Counter(val).most_common(1)[0][0]
footprint = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
return ndimage.generic_filter(arr, most_frequent, footprint=footprint, mode='constant')
print most_frequent(arr)
için yapabilir nasıl Bu kenarında unsurları görmezden bana
[[0 0 0]
[0 4 0]
[0 0 0]]
döndürür. Gördüğünüz gibi orta element 4'tür çünkü bu komşular ve değer arasında en sık görülen bir unsurdur.
Büyük sorun, 3d matris için aynı şeyi yapmam gerektiğidir. Bu
arr = np.array([
[[1, 1], [2, 2], [4, 4]],
[[5, 5], [6, 6], [7, 7]],
[[2, 2], [4, 4], [4, 4]]
])
gibi bir matris için Yani ortada yerde ve [4, 4]
[0, 0]
almak için bekliyoruz. Bu, RuntimeError('filter footprint array has incorrect shape.')
ile başarısız olur.
cval: Ben dokümanlar söylemek için burada generic_filter kullanabilirsiniz şüphelerim var kötü şey modu ‘sabit’ ise skaler, isteğe bağlı değer girişinin geçmiş kenarlarını doldurmak için.
Sorunumu nasıl çözebilirim?
3B giriş dizisi sadece tamsayılar içeriyor mu? – Divakar
Bir soru daha - Bu süzgeci, tüm yön boyunca e 3D dizi herhangi bir uzunlukta olabilir ve sadece '' (3,3,2) 'değil, değil mi? – Divakar