我想使用 python 读取 netcdf 文件。该文件包含一个 double 格式的 netcdf 变量。
我知道这个数量应该是复数,并且我知道最后一个参数始终是 2 个数字(实数和 im)。
我想以有效的方式读取 nedcdf 变量并将其分配给复杂的 python/numpy 变量。
目前我有以下有效的无效程序:
import numpy as N
self.EIG2D = N.zeros((self.nkpt,self.nband,3,self.natom,3,self.natom),dtype=complex)
EIG2Dtmp = root.variables['second_derivative_eigenenergies'][:,:,:,:,:,:,:] #number_of_atoms,
# number_of_cartesian_directions, number_of_atoms, number_of_cartesian_directions,
# number_of_kpoints, product_mband_nsppol, cplex
for ikpt in N.arange(nkpt):
for iband in N.arange(nband):
for icart in N.arange(3):
for iatom in N.arange(natom):
for jcart in N.arange(0,3):
for jatom in N.arange(natom):
self.EIG2D[ikpt,iband,icart,iatom,jcart,jatom] = complex(EIG2Dtmp[iatom,icart,jatom,jcart,ikpt,iband,0],\
EIG2Dtmp[iatom,icart,jatom,jcart,ikpt,iband,1])
如何提高效率?
提前谢谢您,
塞缪尔.
最佳答案
感谢 Spencer Hill,我的解决方案是
self.EIG2D = numpy.vectorize(complex)(EIG2Dtmp[...,0], EIG2Dtmp[...,1])
关于python - 如何在 netcdf python 中传递复杂参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23933834/