【问题标题】:How does python matplotlib.pyplot support datatype from pandas, xarray etc.?python matplotlib.pyplot 如何支持 pandas、xarray 等数据类型?
【发布时间】:2017-04-23 17:46:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python numpy python-xarray


    【解决方案1】:

    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])
    

    【讨论】:

    • 感谢您的解释。 matplotlib.pyplot 是否以类似的方式支持说 plt.contour(tmp) ?
    • 是的,matplotlib 在后台调用 np.array 或类似的函数,例如 np.asarray。这被认为是在函数参数中接受 numpy 数组的库的最佳实践。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2022-01-17
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多