SWIG пытается разыграть numpy.float64 до C ++ Double для новых функций C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 SWIG пытается разыграть numpy.float64 до C ++ Double для новых функций C ++

Сообщение Anonymous »

Я работаю над проектом Python, который использует SWIG для подключения основного кода Python к модулю C ++. Недавно я добавил новую функцию в библиотеку C ++, но в функциях с декоратором @numpy.vectorize , новая функция запускает тип и код>, когда один из входов - это массив Numpy типа numpy.float64 как один из входов. Я заметил, что векторизованные функции автоматически вызывают первую запись при таком входе массива, как numpy.float64 (который по умолчанию не может по умолчанию, передать в C ++ Double ) перед выполнением каждой записи в массиве как Python float .

Код: Выделить всё

@np.vectorize
def test(mu):
print(mu,type(mu))

test(np.array([6.2, 67.3]))
< /code>
6.2 
6.2 
67.3 
< /code>
However, older C++ functions called from vectorized functions do not cause this problem, even in a function that also calls one of the new C++ functions and looks somewhat like:
@np.vectorize
def eps(t,mu):
if t > 0:
return cpplib.old_func(mu)
else:
return cpplib.new_func(mu)
< /code>
Both C++ functions accept a double
ввод и вернуть вывод двойного . Я не наблюдаю каких-либо очевидных различий в старых и новых функциях C ++, их экземплярах в файле каталога .H , rab Directory's Directory. I или сгенерированный SWIG-код для модуля C ++ .
онлайн -документация Numpy для Numpy.i рекомендует копировать pyfragments.swg из исходного кода Numpy в каталог проектов, но мне не нужно было это ранее, и это вызвано Ошибки компиляции. Все, что я знаю, это то, что исправление синтаксических ошибок в библиотеке C ++ не сделало проблему исчезнуть.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»