python - 如何在 netcdf python 中传递复杂参数

标签 python optimization numpy netcdf

我想使用 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])

您还可以引用Numpy: Creating a complex array from 2 real ones?

关于python - 如何在 netcdf python 中传递复杂参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23933834/

相关文章:

python - 类型 'CombinedExpression' 的对象不可 JSON 序列化

python - 如何在Python中输出消息然后在输出中删除它

Python使用变量索引一个numpy数组

python - numpy 数组 : basic questions

python - 如何解码 dtype=numpy.string_ 的 numpy 数组?

python - 如何将函数名称包含到日志记录中

python - 使用 tf.data 实现 tensorflow 输入管道时出错

c++ - 查找 2D 数组中 n 个最大的元素位置

r - 从数值向量中采样等距点

c++ - 优化矩阵旋转 - 关于矩阵中心的任意角度