Разделить объект массива на два вектора разных размеров, используя C - PullRequest
2 голосов
/ 01 августа 2011

у меня

X в качестве входных данных --- это объект dtype это имеет следующую структуру x = [[1,2,3,4 ... n элементов], [1 элемент], [1,2, ... m элементов], [1 элемент]]

Для имитации ввода ...

>>> from numpy import *
>>> x=array([array([1,2,3,4,5]),array([1]),array([1,2,3,4,5,6,7,8]),array([1])],dtype=object)
>>> x
array([[1 2 3 4 5], [1], [1 2 3 4 5 6 7 8], [1]], dtype=object)

Я передаю X в качестве аргумента моему расширению Python C как PyArray_Object

static PyObject* samp(PyObject *self, PyObject *args) {

    PyArrayObject *array,*p1,*p2;
    int n,j;

    if (!PyArg_ParseTuple(args, "O!",&PyArray_Type, &array))
        return NULL;
    n=array->nd;

    if(n!=1 || array->descr->type_num!=PyArray_OBJECT) {
        PyErr_SetString(PyExc_ValueError, "array must be one-dimensional and of Object type");
        return NULL;
    }
    j=array->dimensions[0];
    /* ...... */
}

Теперь я застрял здесь, так как не уверен, как разделить это на 4 объекта. Пожалуйста, кто-нибудь может дать мне несколько советов по этому поводу ...

1 Ответ

1 голос
/ 23 октября 2011

Изначально у вас был массив из четырех массивов.Следующая строка извлекает его в четыре переменные массива:

a,b,c,d=x[0],x[1],x[2],x[3]

Если вам нужны нативные объекты Python вместо массивов numpy, используйте понимание списка:

objs = [y for y in a]

...