如果這個問題不完整或難以理解,我很抱歉,我試圖弄清楚自己! 我有以下的C代碼,在python裏面 - 我不擅長這兩種語言。python中的C代碼和C代碼中的數組複製
下面的C代碼複製numpy數組我認爲。它在我使用它時不工作,它使用SWITCH語句並打印「默認」答案。有人可以幫助嗎?
它是python的版本嗎?它似乎在老版本的python中工作。
static PyObject *llpy_acopy(PyObject *unused, PyObject *args)
{
PyObject *afrom = PyTuple_GET_ITEM(args, 0);
PyObject *ato = PyTuple_GET_ITEM(args, 1);
PyArrayObject *tmp = (PyArrayObject *)afrom;
int nd = tmp->nd;
int n = 1;
int i;
for (i=0; i<nd; i++)
n *= tmp->dimensions[i];
switch(tmp->descr->type_num) {
case PyArray_FLOAT:
memcpy(((PyArrayObject *)ato)->data, tmp->data,
(size_t)(n * sizeof(float)));
break;
case PyArray_INT:
memcpy(IDATA(ato), IDATA(afrom),
(size_t)(n * sizeof(int)));
break;
case PyArray_CHAR:
memcpy(CDATA(ato), CDATA(afrom),
(size_t)(n * sizeof(char)));
break;
default:
PyErr_SetString(PyExc_TypeError, "Cannot copy array now");
return NULL;
}
Py_INCREF(Py_None);
return Py_None;
}
的兩個陣列從一個到另一個被複制是 - 即第一陣列被複制到所述第二,替換現有值。
[[ 1. 0. 0. ]
[ 1.51999998 1.42799997 0. ]
[ 0.73699999 2.37800002 0. ]
...,
[-7.55183792 -9.31523228 -0.19252452]
[-6.7193203 -8.40346909 0.58392692]
[-8.47850037 -9.02481842 -0.46105781]]
[[ 1. 0. 0. ]
[ 1.51999998 1.42799997 0. ]
[ 0.73699999 2.37800002 0. ]
...,
[-5.86299992 -9.36299992 -5.0999999 ]
[-5.61800003 -7.94799995 -4.84499979]
[-6.12400007 -9.65600014 -6.02799988]]
您是否嘗試過調試,以便知道「tmp-> descr-> type_num」返回的值? – dckuehn
這整個事情沒有多大意義,並簡化了一般numpy數組。你應該使用像'PyArray_CopyInto'這樣的功能可用的內置numpy C-api。 – seberg
至於它爲什麼會進入錯誤路徑。我最好的猜測是你可能會遇到不同的整數類型或雙精度數字? – seberg