python matplotlib.pyplot 如何支持来自 pandas、xarray 等的数据类型?

How does python matplotlib.pyplot support datatype from pandas, xarray etc.?

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

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

我的印象是 pandas 是建立在顶级 numpy link and then xarray is sort of based on pandas link 之上的。但是,我没有找到任何信息表明 numpy 本身支持 xarray.DataArray,而且使用 xarray 的人并不多于 numpy。那么为什么我可以用 xarray.DataArray 对象初始化 numpy.ndarray 呢?我的猜测之一是 xarray 包中提供了相应的支持,但 我没有看到 xarray 包中的代码可能影响 numpy.ndarray.__init__ 的机制(或 numpy 包中的任何函数)..

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

NumPy 正在寻找一种 __array__ 方法来将任意对象转换为 numpy 数组,pandas 和 xarray 对象都定义了该数组。

对于您自己的 class,这很容易实现,例如,

import numpy as np

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

 np.array(MyArray())
 # array([0, 1, 2, 3, 4])