में रैपिंग सी फ़ंक्शन मैं कुछ एनम्पी एरे में हेरफेर करने के लिए पाइथन से अपना सी फ़ंक्शन कॉल करना चाहता हूं। समारोह इस तरह है:साइथन और न्यूमपी
void c_func(int *in_array, int n, int *out_array);
जहां परिणाम out_array, जिसका आकार पहले से मैं जानता हूँ कि में आपूर्ति की जाती है (नहीं मेरी समारोह, वास्तव में)। मैं में करने की कोशिश इसी .pyx एक NumPy सरणी से फ़ंक्शन का इनपुट गुजरती हैं, और एक NumPy सरणी में परिणाम स्टोर कर के लिए, निम्न फ़ाइल क्रम में:
def pyfunc(np.ndarray[np.int32_t, ndim=1] in_array):
n = len(in_array)
out_array = np.zeros((512,), dtype = np.int32)
mymodule.c_func(<int *> in_array.data, n, <int *> out_array.data)
return out_array
लेकिन मैं "Python objects cannot be cast to pointers of primitive types"
मिल आउटपुट असाइनमेंट के लिए त्रुटि। मैं इसे कैसे पूर्ण करूं?
(अगर मैं अपेक्षा करते हैं कि अजगर फोन करने वाले उचित उत्पादन सरणी आबंटित करता है, तो मैं
def pyfunc(np.ndarray[np.int32_t, ndim=1] in_array, np.ndarray[np.int32_t, ndim=1] out_array):
n = len(in_array)
mymodule.cfunc(<int *> in_array.data, n, <int*> out_array.data)
कर सकते हैं लेकिन मैं एक तरीका है कि फोन करने वाले को उचित रूप से पूर्व आवंटित करने के लिए नहीं है में यह कर सकते हैं आकार का आउटपुट सरणी?
आप 'cdef np.ndarray' से पहले' out_array' assignement जोड़ने उपलब्ध कराने का प्रयास किया? – Simon
यह काम करता है, धन्यवाद !!! – Peter