Есть какой-нибудь способ создать NumPy-матрицу с помощью C API?
-
05-09-2019 - |
Вопрос
Я прочитал документацию по NumPy C API, которую смог найти, но все еще не смог выяснить, есть ли возможность создать матричный объект с C API — не двумерный массив.Функция предназначена для работы с математическими матрицами, и я не хочу странных результатов, если пользователь вызывает умножение матрицы, забыв преобразовать это значение из массива в матрицу (умножение и возведение в степень - единственное отличие, которое имеет подкласс matrix).
Решение
numpy.matrix
является обычным классом, определенным в numpy/core/defmatrix.py.Вы можете создать его с помощью C API, как и любой другой экземпляр пользовательского класса в Python.
Другие советы
Вы можете вызвать любой вызываемый python с помощью PyObject_Call*
функции.
PyObject *numpy = PyImport_ImportModule("numpy");
PyObject *numpy_matrix = PyObject_GetAttrString(numpy, "matrix");
PyObject *my_matrix = PyObject_CallFunction(numpy_matrix, "(s)", "0 0; 0 0");
Это создаст матрицу my_matrix
размером 2х2.
Редактировать: Изменены ссылки на numpy.zeros
/numpy.ndarray
Для numpy.matrix
вместо этого.
Я также нашел хороший учебник по этому предмету: http://starship.python.net/crew/hinsen/NumPyExtensions.html