行列の中で最も頻繁に使用される要素は、隣接値とそれ自体に基づいて計算する必要があります。私はgeneric_filter関数を見つけました。だからここに私は2次元配列3d配列の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)
のためにこれを行うことができる方法である。このエッジ上の要素を無視してくれ
[[0 0 0]
[0 4 0]
[0 0 0]]
を返します。あなたが見るように、中間要素は4です。これは、これが隣人と値の中で最も頻繁に存在する要素なのでです。
大きな問題は、私が3dマトリクスに対して同じことをする必要があることです。したがって、この
arr = np.array([
[[1, 1], [2, 2], [4, 4]],
[[5, 5], [6, 6], [7, 7]],
[[2, 2], [4, 4], [4, 4]]
])
のような行列のために、私は途中でどこでも[0, 0]
と[4, 4]
を得ることを期待します。これは、RuntimeError('filter footprint array has incorrect shape.')
で失敗します。
CVAL:スカラー、オプションの値のモードが 「定数」であれば、入力の過去のエッジを埋めるために、私はドキュメントが言うので、私はgeneric_filterここに使用することができます疑問を持っているより悪い事。
どうすれば問題を解決できますか?
3D入力配列には整数だけが含まれていますか? – Divakar
もう1つの質問 - このようなフィルタをentir e '(3,3,2)'だけではなく、任意の長さの3D配列ができますか? – Divakar