Ваша реализация выглядит достаточно хорошо для меня. Тем не менее, вот некоторые улучшения, чтобы сделать его красивее:
qvec=np.empty([ndim,N,N,N])
freq = np.arange(-(N-1)/2.,+(N+1)/2.)
x, y, z = np.meshgrid(*[freq]*ndim, indexing='ij')
qvec[0,...]=x # qvec[0] = x
qvec[1,...]=y # qvec[1] = y
qvec[2,...]=z # qvec[2] = z
Улучшения:
- Использование
numpy.empty()
вместо numpy.zeros()
- Избавление от индексации
range(N)
, поскольку это даст тот же массив freq
- Использование итеративной распаковки и использование
ndim
- Использование многоточия для размеров (также не требуется)
Итак, после включения всех вышеперечисленных пунктов будет достаточно следующего фрагмента кода:
qvec=np.empty([ndim,N,N,N])
freq = np.arange(-(N-1)/2.,+(N+1)/2.)
x, y, z = np.meshgrid(*[freq]*ndim, indexing='ij')
qvec[0:ndim] = x, y, z
Примечание: я предполагаю, что N
- то же самое, поскольку вы использовали одно и то же имя переменной.