2

用最简单的方式提出问题——这段代码的最后一行是如何工作的?

import numpy as np
import xarray as xr
tmp = xr.DataArray(np.random.rand(100,100))
howthiswork = np.array(tmp)

我的印象是 pandas 是建立在顶部 numpy链接上的,然后 xarray 有点基于 pandas链接。但是,我没有找到任何说明 numpy 本身支持 xarray.DataArray 的信息,而且使用 xarray 的人并不多于 numpy。那么为什么我可以用 xarray.DataArray 对象初始化 numpy.ndarray 呢?我的一个猜测是 xarray 包中提供了相应的支持,但我没有看到 xarray 包中的代码可能影响 numpy.ndarray.__init__(或 numpy 包中的任何函数)的机制。

谁能给我解释一下这种上下支持是如何实现的?

4

1 回答 1

3

NumPy 寻找一种__array__将任意对象转换为 numpy 数组的方法,该数组由 pandas 和 xarray 对象定义。

这很容易为您自己的类实现,例如,

import numpy as np

class MyArray:
    def __array__(self, dtype=None):
        return np.arange(5)

 np.array(MyArray())
 # array([0, 1, 2, 3, 4])
于 2016-12-08T13:45:28.773 回答