首页 > 解决方案 > 有没有办法将在 C 中创建的 numpy Array 强制转换为 MaskedArray?

问题描述

我想使用已经存在的数据在 C 中创建一个 numpy.mp.MaskedArray。我可以像这样创建一个 numpy.Array:

PyObject *arr = PyArray_SimpleNewFromData(...)

但我希望呈现给图书馆用户的对象是 MaskedArray(Array 的子类),而不是 Array。有没有办法做到这一点?

标签: numpy

解决方案


自答:

// Create the numpy array
PyObject *arr = PyArray_NewFromDescr(&PyArray_Type, descr, 1,
        &longCount, &pointSize, data, NPY_ARRAY_WRITEABLE, nullptr);

// Wrap the created array in a MaskedArray.
PyObject *module = PyImport_ImportModule("numpy.ma");
PyObject *dict = PyModule_GetDict(module);
PyObject *o = PyDict_GetItemString(dict, "MaskedArray");

PyObject *args = PyTuple_New(1);
PyTuple_SetItem(args, 0, arr);

m_directArray = PyObject_CallObject(o, args);

推荐阅读