【问题标题】:Round and overwrite xarray data in place就地舍入和覆盖 xarray 数据
【发布时间】:2023-01-11 02:33:19
【问题描述】:

我想将 xarray 中的所有值四舍五入到小数点后两位。

我尝试了以下方法:

def round_dim(data_arr):
   data_arr.data.round(decimals = 2)
   return data_arr

我这样称呼它:

data_values = <xarray.core.dataarray.DataArray>
data_values = round_dim(data_values)

我希望 data_values 现在如何将相同的值四舍五入到小数点后两位,但这并没有发生。

【问题讨论】:

    标签: python python-xarray


    【解决方案1】:

    如果你想将round(decimals = 2)应用于你的整个数据集,你可以使用xarray.Dataset.map

    它返回一个复制原始数据集的所有数据都四舍五入了,它不能就地工作。

    import numpy as np
    import xarray
    
    dataset = xarray.Dataset()
    dataset["a"] = xarray.DataArray(np.linspace(0, 1, 10))
    dataset["b"] = xarray.DataArray(np.arange(10))
    print(dataset)
    # <xarray.Dataset>
    # ...
    #    a        (dim_0) float64 0.0 0.1111 0.2222 0.3333 ... 0.7778 0.8889 1.0
    #    b        (dim_0) int32 0 1 2 3 4 5 6 7 8 9
    
    def round_dim(dataset):
        return dataset.map(lambda a: np.round(a, decimals=2))
    
    dataset = round_dim(dataset)
    print(dataset)
    # <xarray.Dataset>
    # ...
    #     a        (dim_0) float64 0.0 0.11 0.22 0.33 0.44 0.56 0.67 0.78 0.89 1.0
    #     b        (dim_0) int32 0 1 2 3 4 5 6 7 8 9
    

    【讨论】:

    • 这仅返回数据数组,而不返回 xarray 中嵌入的数据数组。例如,在我四舍五入之后,我不能在data_values 上调用.data。为了解决这个问题,我刚刚做了data_values.data = round_dim(data_values) 但是,这仍然没有将大多数值四舍五入到小数点后两位。我看到以下内容:[-62.740001678989, -62.75, -62.75, -62.7521368636] 我相信确实发生了四舍五入(正如 2 -62.75 值所暗示的那样)但尾随数字仍然存在,它没有完全四舍五入到小数点后两位。
    • 哦,好的,您想将舍入应用于整个数据集。行。我将使用.map 编辑我的答案。
    • 问题更多的是多余的数字。四舍五入有效,但保留小数点后前 2 位以外的额外数字。不知道如何摆脱那些。这样就只剩下小数点后2位了。
    猜你喜欢
    • 2011-04-24
    • 2021-03-05
    • 2014-03-24
    • 2023-04-09
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多