我正在寫一個c擴展名來計算他的標準偏差。性能很重要,因爲它將在大型數據集上執行。當我從列表中獲得項目時,我很難弄清楚如何獲得pyobject的價值。這是我第一次爲python編寫一個c擴展,感謝任何幫助。顯然,我不知道如何正確使用代碼示例按鈕:(標準差的python c擴展
這是我到目前爲止有:
#include <Python.h>
static PyObject*
func(PyObject *self, PyObject *args)
{
PyObject *list, *item;
Py_ssize_t i, len;
if (!PyArg_UnpackTuple(args, "func", 1, 1, &list)){
return NULL;
}
printf("hello world\n");
Py_INCREF(list);
len = PyList_GET_SIZE(list);
for (i=0;i<len;i++){
item = PyList_GET_ITEM(list, i);
PyObject_Print(item,stdout,0);
}
return list;
}
static char func_doc[] = "This function calculates standard deviation.";
static PyMethodDef std_methods[] = {
{"func", func, METH_VARARGS, func_doc},
{NULL, NULL}
};
PyMODINIT_FUNC
initstd(void)
{
Py_InitModule3("std", std_methods, "This is a sample docstring.");
}
我目前使用numpy的進行計算,但名單必須首先轉換爲numpy的陣列,我想,以避免由於列表很大,整個數據集是幾百兆。我不是專家,但也許不計算性能需要花很多錢,但我想看看在使用Python廓線儀的一個速度上的差異。 – Xavier 2010-08-03 23:41:56
轉換爲numpy的陣列可能不會像你想象的那樣大的交易。如果你從加載文件或數據庫數據,你已經做了相當大的開銷加載,作爲一個普通的Python列表。如果您將數據直接加載到Numpy數組中,那麼您將消除該開銷。即使你有從正常列表「轉換」到一個數組,你以後可以保存您numpy的陣列快速加載。 http://docs.scipy.org/doc/numpy/reference/generated/numpy.load.html – Cerin 2010-08-04 12:45:28