python xarray

例子

dataset.py/21 lines


        with xr.open_dataset(self._path) as d:
            self._lat = d[self._latname].data
            self._lon = d[self._lonname].data
            if self._hastime:
                self._time = d[self._timename].data
                self._time_d = (pd.DatetimeIndex(self._time) -
                                pd.datetime(1970, 1, 1)).days.values

                vardim = np.setdiff1d(
                    d[self._varname].dims,
                    (self._latname, self._lonname, self._timename))

            else:
                self._time = None
                self._time_d = None

                vardim = np.setdiff1d(
                    d[self._varname].dims,
                    (self._latname, self._lonname))

            if len(vardim) == 1:
                self._vardim = vardim[0]
                self._vardim_len = len(d[self._vardim])
            elif len(vardim) == 0:
                self._vardim = None
                self._vardim_len = None
            else:
                raise ValueError(
                    'The variable dimensions do not match requirements.')

            if self._hastimebin:
                self._timebin = d[self._timebinname].data
                self._timebin_d = np.array(
                    [(pd.DatetimeIndex(self._timebin[:, col]) - pd.datetime(1970, 1, 1)).days.values
                     for col in range(2)]).T
            else:
                self._timebin = None
                self._timebin_d = None
    def get_writeable(
            self,
            scale_factor: int = 1) -> 'SpatialData':
        """Get a writable version of the datasets.

        Parameters
        ----------
        scale_factor
            The scale factor of the dataset that is used to rearrange the spatial dimension
            of the dataset.

        Returns
        ----------
        A 'clean' version of the dataset.

        """

        if scale_factor == 1:
            var = self.var
        else:
            var = self._rescale(scale_factor)

        if self._dtype is not None:
            var = var.astype(self._dtype)

        # Create dataset.
        ds_new = xr.Dataset()
        ds_new['data'] = var

        # Put attributes back.
        ds_new.attrs = self.ds.attrs

        # If the dataset has a timebins, put them back.
        if self.hastimebin:
            ds_new[self.timebinname] = self.ds[self.timebinname]

        if self.hastime:
            ds_new = ds_new.rename({
                self.timename: 'time'
            })

        if self.hastimebin:
            ds_new = ds_new.rename({
                self.timebinname: 'timebin'
            })

        # Some datasets store data with ascending latitude (-90, ..., 90). We stick
        # to the convention of descending latitudes (90, ..., -90) as this puts
        # north-west pixel at [0, 0] index of array when writing as zarr file.
        if ds_new.lat[0].data < ds_new.lat[1].data:
            ds_new = ds_new.reindex(lat=list(reversed(ds_new.lat)))

        return ds_new
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

balabalahoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值