要件を減らすために、簡単な例を用意しました
import numpy as np
import pylab as plt
data = np.arange((64**3))
data.resize((64,64,64))
def get_slice(volume, orientation, index):
orientation2slicefunc = {
"x" : lambda ar:ar[index,:,:],
"y" : lambda ar:ar[:,index,:],
"z" : lambda ar:ar[:,:,index]
}
return orientation2slicefunc[orientation](volume)
plt.subplot(221)
plt.imshow(get_slice(data, "x", 10), vmin=0, vmax=64**3)
plt.subplot(222)
plt.imshow(get_slice(data, "x", 39), vmin=0, vmax=64**3)
plt.subplot(223)
plt.imshow(get_slice(data, "y", 15), vmin=0, vmax=64**3)
plt.subplot(224)
plt.imshow(get_slice(data, "z", 25), vmin=0, vmax=64**3)
plt.show()
これにより、次のプロットが作成されます。
主なトリックは、辞書マッピングのオリエンテーションをラムダメソッドにマッピングすることです。これにより、煩わしいif-then-else-blockを作成する必要がなくなります。もちろん、向きに別の名前、たとえば番号を付けることもできます。
多分これはあなたを助けます。
Thorsten
PS:「IndexOutOfRange」については気にしませんでした。このコンテキストでは完全に理解できるので、この例外をポップアウトさせてもかまいません。