我有 2 个 xarray 对象。我想检查这两个数组是否具有相同的尺寸和坐标。但两个对象不需要具有相同的值或元数据。
例如:
import xarray as xr
arr1_data = [[1, 2], [3, 4]]
arr2_data = [[5, 6], [7, 8]]
arr1 = xr.DataArray(arr1_data, dims=["y", "x"], coords={"y": ["coord1", "coord2"]})
arr2 = xr.DataArray(arr2_data, dims=["y", "x"], coords={"y": ["coord1", "coord2"]})
compare_xarray_objects(arr1, arr2) # Should return True
.dims
属性返回一个元组,因此很容易判断维度是否相同。但是 .coords
属性返回一个 DataArrayCoordinates
对象,我不知道如何将 DataArrayCoords
对象与另一个对象进行比较。
最佳答案
对于像示例中您尝试比较索引坐标的情况,只需使用 xr.align
使用 join='exact'
参数。
xr.align(arr1, arr2, join='exact') # will raise a ValueError if not aligned
如果您还尝试比较非索引坐标,您也可以使用 xr.testing.assert_equal
。这将检查所有坐标,包括那些不在数组维度中的坐标(例如,如果您有另一个由 x
和 y
索引的坐标 z
) 。但是,它比 xr.align 更挑剔,因为它要求维度顺序相同。如果这是一个问题,您可以循环遍历非索引坐标并使用此测试函数来检查每个坐标的相等性。
关于numpy - 如何检查两个 xarray 对象是否具有相同的维度和坐标(但不一定是值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70973092/