いくつ2D arrays
かの数値プロセスの出力として、1x1, 3x3, 5x5, ...
さまざまな解像度に対応する形の数値があります。
ステージでは、平均、つまり形状の 2D 配列値をnxn
生成する必要があります。出力の形状が一貫している場合、つまり、11x11
ソリューション内のすべてが明白であると言う場合、次のようになります。
element_wise_mean_of_all_arrays
.
ただし、この投稿の問題については、配列の形状が異なるため、明らかな方法は機能しません!
kron
functionを使用すると役立つかもしれないと思ったのですが、そうではありませんでした。例えば、配列が17x17
作り方の形になっている場合21x21
。したがって1x1
、 、3x3
、... からの他のすべてについて、一定の形状の配列を構築するには、 とし21x21
ます。また、ターゲット形状と比較して、アレイの形状が小さくなったり大きくなったりする場合もあります。それは31x31
に縮小されるの配列です21x21
。
この問題は、縮小または拡大される画像の非常に一般的なタスクとして想像できます。
2D
numpy、scipyなどを使用して、Pythonで配列で同じジョブを実行するための効率的なアプローチは何ですか?
更新: 以下は、受け入れられた回答の少し最適化されたバージョンです。
def resize(X,shape=None):
if shape==None:
return X
m,n = shape
Y = np.zeros((m,n),dtype=type(X[0,0]))
k = len(X)
p,q = k/m,k/n
for i in xrange(m):
Y[i,:] = X[i*p,np.int_(np.arange(n)*q)]
return Y
それは完璧に機能しますが、効率の点で最良の選択であることに皆さんは同意しますか? 改善しない場合は?
# Expanding ---------------------------------
>>> X = np.array([[1,2,3],[4,5,6],[7,8,9]])
[[1 2 3]
[4 5 6]
[7 8 9]]
>>> resize(X,[7,11])
[[1 1 1 1 2 2 2 2 3 3 3]
[1 1 1 1 2 2 2 2 3 3 3]
[1 1 1 1 2 2 2 2 3 3 3]
[4 4 4 4 5 5 5 5 6 6 6]
[4 4 4 4 5 5 5 5 6 6 6]
[7 7 7 7 8 8 8 8 9 9 9]
[7 7 7 7 8 8 8 8 9 9 9]]
# Shrinking ---------------------------------
>>> X = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
>>> resize(X,(2,2))
[[ 1 3]
[ 9 11]]
最後の注意:Fortran
上記のコードは、可能な限り最高のパフォーマンスを得るために簡単に変換できます。