Позволяет ли pyFFTW сохранить входной массив

Я хотел бы знать, есть ли возможность принудительного применения pyFFTW (обертка вокруг FFTW) входного вектора, который будет сохранен во время прямого преобразования r2c.

По крайней мере, в оригинальном FFTW FFTW_PRESERVE_INPUT кажется опцией по умолчанию (посмотрите флаги ограничения алгоритма здесь: http://www.fftw.org/doc/Planner-Flags.html)

С вызовом pyFFTW FFTW.__ __() можно пройти несколько флагов, но здесь указан только "FFTW_DESTROY_INPUT": http://hgomersall.github.io/pyFFTW/pyfftw/pyfftw.html

Вероятно, это не только ошибка в документации, потому что в исходном коде в файле builders/builders.py есть немного пугающее утверждение (строка 166):

overwrite_input: может ли входной массив быть перезаписан во время преобразования.

Далее в коде в файле builders/_utils.py в определении функции _Xfftn присутствует только флаг Destory: if overwrite_input: flags.append('FFTW_DESTROY_INPUT')

Главный вопрос: зная, что FFTW_PRESERVE_INPUT нельзя передать с помощью pyFFTW, могу ли я хотя бы полагаться на тот факт, что в оригинальном FFTW этот флаг FFTW_PRESERVE_INPUT установлен по умолчанию? Вспомните приведенный выше комментарий: "Может ли входной массив быть перезаписан?" Знают ли авторы обертки pyFFTW что-то еще, и FFTW_PRESERVE_INPUT по умолчанию не будет работать?

$ rpm -q fftw fftw-3.3.4-6.fc23.x86_64

>>> pyfftw.__version__ '0.10.1

1 ответ

Решение

Да, все значения по умолчанию используются, если явно не запрошено - это означает, что если вы не запросите DESTROY_INPUT, затем PRESERVE_INPUT неявный, за исключением случая, когда у вас есть многомерное преобразование c2r, и в этом случае вход будет уничтожен (это задокументировано в Schemes раздел документации, на которую вы ссылаетесь, а также документы FFTW, на которые вы ссылаетесь).

Если вы обнаружите случай, когда входные данные уничтожены, и они явно не запрашиваются как таковые или не являются одним из вышеперечисленных преобразований, это ошибка, о которой следует сообщить.

interfaces Код делает различные копии, чтобы убедиться, что преобразования сохраняются при необходимости.

Насколько я помню, на стадии планирования гораздо менее важна защита массивов - самый простой способ защитить массив - это использовать builders интерфейс, который, если явно не указано иное, всегда будет сохранять исходный массив и копировать его обратно.

Другие вопросы по тегам