iter.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:fstd2nc 作者: neishm 项目源码 文件源码
def __getitem__ (self, key):
    import numpy as np
    # Coerce key into a tuple of slice objects.
    if not isinstance(key,tuple):
      if hasattr(key,'__len__'): key = tuple(key)
      else: key = (key,)
    if len(key) == 1 and hasattr(key[0],'__len__'):
      key = tuple(key[0])
    if Ellipsis in key:
      i = key.index(Ellipsis)
      key = key[:i] + (slice(None),)*(self.ndim-len(key)+1) + key[i+1:]
    key = key + (slice(None),)*(self.ndim-len(key))
    if len(key) > self.ndim:
      raise ValueError(("Too many dimensions for slicing."))
    final_shape = tuple(len(np.arange(n)[k]) for n,k in zip(self.shape,key) if not isinstance(k,int))
    data = np.ma.empty(final_shape, dtype=self.dtype)
    outer_ndim = self._record_id.ndim
    record_id = self._record_id.__getitem__(key[:outer_ndim])
    # Final shape of each record (in case we did any reshaping along ni,nj,nk
    # dimensions).
    record_shape = self.shape[self._record_id.ndim:]
    # Iterate of each record.
    for ind in np.ndindex(record_id.shape):
      r = int(record_id[ind])
      if r >= 0:
        data[ind] = self._buffer._fstluk(r)['d'].transpose().reshape(record_shape)[(Ellipsis,)+key[outer_ndim:]]
      else:
        data.mask = np.ma.getmaskarray(data)
        data.mask[ind] = True
    return data
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号