注:這不是一個問題 - 我解決了它,並張貼在這裏了,想和大家分享我的經驗教訓。問題得到一個erraneous結果
我遇到過使用numpy的昨晚的一個問題,這裏是我如何簡化爲短代碼。起初它對我來說看起來像一個bug,但是當我試圖寫這個問題時,我意識到這是我自己的錯誤。希望以後也可以從中受益的其他人也能從中受益!
這是對我的Win 7 64重複,以WinSDK 7.1的C編譯器。 Python版本是3.3.3,使用MSC v.1600構建。 Numpy版本是1.8.0。
0)小結:當我通過一個ndarray到我的DLL從C代碼編譯,C代碼看到不同陣列比我傳入
1)寫AC碼:
// testdll.c
#include <stdlib.h>
__declspec(dllexport) void copy_ndarray(double *array1, double *array2, size_t array_length);
void copy_ndarray(double *array1, double *array2, size_t array_length)
{
size_t i;
for(i=0; i<array_length; i++)
array2[i] = array1[i];
return;
}
2)寫Python代碼:
import numpy as np
import ctypes
# wrap the function from dll to python
lib = ctypes.cdll.LoadLibrary('./testdll.dll')
fun = lib.copy_ndarray
fun.restype = None
fun.argtypes = [np.ctypeslib.ndpointer(ctypes.c_double), np.ctypeslib.ndpointer(ctypes.c_double), ctypes.c_size_t]
# Initialize array1 and array2
array_length= 10
temp = np.c_[100.*np.ones(array_length), 200.*np.ones(array_length)]
array1 = temp[:, 1]
array2 = np.zeros(array_length)
fun(array1, array2, array_length)
3)運行的代碼。看看array1和array2是如何不同的。
IMO你應該更改標題的東西,看起來像一個實際的問題,或使谷歌搜索友好,讓未來的用戶可以很容易地找到它。 :) –
@ AshwiniChaudhary謝謝!我同意。我已更新它,任何進一步的建議仍然歡迎!此外,我標記爲社區維基可以意識到,不能撤消...你認爲我應該讓它開放,看看別人是否有更好/更乾淨的方式來做到這一點? :) –
其他人仍然可以發佈答案,所以這不是一個問題。 –