有没有办法将C中创建的numpy数组强制转换为MaskedArray?

有没有办法将C中创建的numpy数组强制转换为MaskedArray?,numpy,Numpy,我想使用已经存在的数据在C中创建一个numpy.mp.MaskedArray。我可以创建一个numpy.Array,如下所示: PyObject *arr = PyArray_SimpleNewFromData(...) 但我希望呈现给库用户的对象是MaskedArray(数组的子类),而不是数组。有什么方法可以做到这一点吗?自动回答: // Create the numpy array PyObject *arr = PyArray_NewFromDescr(&PyArray_Typ

我想使用已经存在的数据在C中创建一个numpy.mp.MaskedArray。我可以创建一个numpy.Array,如下所示:

PyObject *arr = PyArray_SimpleNewFromData(...)
但我希望呈现给库用户的对象是MaskedArray(数组的子类),而不是数组。有什么方法可以做到这一点吗?

自动回答:

// 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);

SybclassesMA中的大部分(如果不是全部的话)代码都是Python代码,没有编译。MA有一个常规数组
data
属性,加上一个布尔数组
mask
属性。