After some experiments, I'm now using a trade-off between readability and speed. The map function provides a neat solution, although it is still rather slow. In part, my question was addressed in: Numpy: Beginner nditer
Here is my current version:
reader = sitk.ImageFileReader()
reader.SetFileName ( tensorVolumePath )
image = reader.Execute()
dimes = image.GetSize()
origin = image.GetOrigin()
values = sitk.GetArrayFromImage( image )
valuesFlat = values.reshape(dims[0]*dims[1]*dims[2], 3, 3)
arrayInv = np.array(map(np.linalg.inv, valuesFlat))
imageInv = sitk.GetImageFromArray( valuesFlat.reshape(dims[0], dims[1], dims[2], -1) )
imageInv.SetOrigin(origin)
writer = sitk.ImageFileWriter()
writer.SetFileName ( tensorVolumeInversePath )
writer.Execute ( imageInv );