使用C将numpy数组对象拆分为两个不同大小的向量

2 投票
1 回答
668 浏览
提问于 2025-04-16 22:40

我有一个输入

X,它的类型是对象(dtype object),结构如下:

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

最开始你有一个包含四个数组的数组。下面这一行代码把这四个数组提取成了四个单独的数组变量:

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

如果你需要的是原生的Python对象,而不是numpy数组,可以使用列表推导式来实现:

objs = [y for y in a]

撰写回答