J'essaie de passer un tableau numpy dans la fonction C où je veux changer les valeurs du tableau. Mais je dois multiplier l'index par 2 pour le faire fonctionner correctement. L'attribution d'une valeur à un index impair (que ce soit i
) conduit à affecter une poubelle à l'index (i-1)/2
. Voici le code source.La magie se produit lorsque le tableau numpy est en train de changer par la fonction C
C:
#include "assign_array.h"
void assign(int *arr, int i) {
arr[i] = 2017;
}
Python:
import ctypes, numpy
lib2 = ctypes.cdll.LoadLibrary('./assign_array.so')
for i in range(5):
array = numpy.zeros(8, dtype = int)
ptr = array.ctypes.data_as(ctypes.POINTER(ctypes.c_int))
print('i = {}:'.format(i))
lib2.assign(ptr, i)
print(array)
Pourquoi est-ce qui se passe?
Je compile de cette façon: 'gcc -shared -o assign_array.so -fPIC assign_array.c' – Dimansel
Cela suggère (bien que cela ne prouve pas) que vous utilisez un système Linux/Unix-ish, donc probablement votre base Python utilise C 'long' pour son type interne' int', et votre compilateur C de base a 'long' de 64 bits. Les autres compilateurs C sont similaires. – torek
@MatteoItalia: voir mise à jour avec parenthetical: Python 'int' est très probablement mappé à C' long'. (Il est vrai que 64 bits 'int' est rare, Cray était l'un de ces systèmes.) – torek