事实证明,几乎所有东西在技术上都类似于数组。“类数组”更多地是关于如何解释输入的说明,而不是对输入内容的限制。如果参数记录为类似数组的形式,则NumPy将尝试将其解释为数组。
除了几乎是重言式的之外,没有像数组一样的正式定义-
像数组一样是
np.array可以转换为的任何Python对象
ndarray。要做到这一点,您需要研究源代码。
NPY_NO_EXPORT PyObject *PyArray_FromAny(PyObject *op, PyArray_Descr *newtype, int min_depth, int max_depth, int flags, PyObject *context){ PyArrayObject *arr = NULL, *ret; PyArray_Descr *dtype = NULL; int ndim = 0; npy_intp dims[NPY_MAXDIMS]; if (PyArray_GetArrayParamsFromObject(op, newtype, 0, &dtype, &ndim, dims, &arr, context) < 0) { Py_XDECREF(newtype); return NULL; } ...
尤其有趣的是
PyArray_GetArrayParamsFromObject,其注释列举了
np.array期望的对象类型:
NPY_NO_EXPORT intPyArray_GetArrayParamsFromObject(PyObject *op, PyArray_Descr *requested_dtype, npy_bool writeable, PyArray_Descr **out_dtype, int *out_ndim, npy_intp *out_dims, PyArrayObject **out_arr, PyObject *context){ PyObject *tmp; }
因此,通过研究源代码,我们可以得出类似数组的结论
- 一个NumPy数组,或者
- 一个NumPy的标量,或
- Python标量,或者
- 任何支持PEP 3118缓冲区接口的对象,或者
- 任何支持
__array_struct__
or__array_interface__
接口的对象,或者 - 提供
__array__
功能的任何对象,或者 - 可以视为列表列表的任何对象,或者
- 什么!如果它不属于其他情况之一,它将被视为
object
dtype的0维数组。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)