Add Chebyshev (cosine) transforms implemented via FFTs

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

Add Chebyshev (cosine) transforms implemented via FFTs

Chris Val
PR #16999: https://github.com/numpy/numpy/pull/16999

Hello all,
this PR adds the two 1D Chebyshev transform functions `chebyfft` and
`ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and
`irfft`, respectively. As far as I understand, `pockefft` does not support
cosine transforms natively; for this reason, an even extension of the input
vector is constructed, whose real FFT corresponds to a cosine transform.

The motivation behind these two additions is the ability to quickly perform
direct and inverse Chebyshev transforms with `numpy`, without the need to
write scripts that do the necessary (although minor) modifications.
Chebyshev transforms are used often e.g. in the spectral integration of PDE
problems; thus, I believe having them implemented in `numpy` would be useful
to many people in the community.

I'm happy to get comments/feedback on this feature, and on whether it's
something more people would be interested in. Also, I'm not entirely sure
what part of this functionality is/isn't present in `scipy`, so that the two
`fft` modules remain consistent with one another.

Best, Chris





--
Sent from: http://numpy-discussion.10968.n7.nabble.com/
_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion
Reply | Threaded
Open this post in threaded view
|

Re: Add Chebyshev (cosine) transforms implemented via FFTs

ralfgommers


On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <[hidden email]> wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999

Hello all,
this PR adds the two 1D Chebyshev transform functions `chebyfft` and
`ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and
`irfft`, respectively. As far as I understand, `pockefft` does not support
cosine transforms natively; for this reason, an even extension of the input
vector is constructed, whose real FFT corresponds to a cosine transform.

The motivation behind these two additions is the ability to quickly perform
direct and inverse Chebyshev transforms with `numpy`, without the need to
write scripts that do the necessary (although minor) modifications.
Chebyshev transforms are used often e.g. in the spectral integration of PDE
problems; thus, I believe having them implemented in `numpy` would be useful
to many people in the community.

I'm happy to get comments/feedback on this feature, and on whether it's
something more people would be interested in. Also, I'm not entirely sure
what part of this functionality is/isn't present in `scipy`, so that the two
`fft` modules remain consistent with one another.

Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point.

As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list.

Cheers,
Ralf

_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion
Reply | Threaded
Open this post in threaded view
|

Re: Add Chebyshev (cosine) transforms implemented via FFTs

Charles R Harris


On Tue, Aug 4, 2020 at 4:55 AM Ralf Gommers <[hidden email]> wrote:


On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <[hidden email]> wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999

Hello all,
this PR adds the two 1D Chebyshev transform functions `chebyfft` and
`ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and
`irfft`, respectively. As far as I understand, `pockefft` does not support
cosine transforms natively; for this reason, an even extension of the input
vector is constructed, whose real FFT corresponds to a cosine transform.

The motivation behind these two additions is the ability to quickly perform
direct and inverse Chebyshev transforms with `numpy`, without the need to
write scripts that do the necessary (although minor) modifications.
Chebyshev transforms are used often e.g. in the spectral integration of PDE
problems; thus, I believe having them implemented in `numpy` would be useful
to many people in the community.

I'm happy to get comments/feedback on this feature, and on whether it's
something more people would be interested in. Also, I'm not entirely sure
what part of this functionality is/isn't present in `scipy`, so that the two
`fft` modules remain consistent with one another.

Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point.

As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list.


Chebfun is based around this method, they use series with possibly thousands of terms. Trefethen is a big fan of Chebyshev polynomials.

Chuck

_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion
Reply | Threaded
Open this post in threaded view
|

Re: Add Chebyshev (cosine) transforms implemented via FFTs

Stephan Hoyer-2


On Tue, Aug 4, 2020 at 6:10 PM Charles R Harris <[hidden email]> wrote:


On Tue, Aug 4, 2020 at 4:55 AM Ralf Gommers <[hidden email]> wrote:


On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris <[hidden email]> wrote:
PR #16999: https://github.com/numpy/numpy/pull/16999

Hello all,
this PR adds the two 1D Chebyshev transform functions `chebyfft` and
`ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft` and
`irfft`, respectively. As far as I understand, `pockefft` does not support
cosine transforms natively; for this reason, an even extension of the input
vector is constructed, whose real FFT corresponds to a cosine transform.

The motivation behind these two additions is the ability to quickly perform
direct and inverse Chebyshev transforms with `numpy`, without the need to
write scripts that do the necessary (although minor) modifications.
Chebyshev transforms are used often e.g. in the spectral integration of PDE
problems; thus, I believe having them implemented in `numpy` would be useful
to many people in the community.

I'm happy to get comments/feedback on this feature, and on whether it's
something more people would be interested in. Also, I'm not entirely sure
what part of this functionality is/isn't present in `scipy`, so that the two
`fft` modules remain consistent with one another.

Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields. The reason for the duplication stems from way back when we had no wheels and SciPy was very hard to install. So I don't think there's anything we'd add to numpy.fft at this point.

As I commented on your PR, it would be useful to add some references and applications, and then make your proposal on the scipy-dev list.


Chebfun is based around this method, they use series with possibly thousands of terms. Trefethen is a big fan of Chebyshev polynomials.

I am quite sure that Chebyshev transforms are useful, but it does feel like something more directly suitable for SciPy than NumPy. The current division for submodules like numpy.fft/scipy.fft and numpy.linalg/scipy.linalg exists for outdated historical reasons, but at this point it is easiest for users to understand if has SciPy has a strict superset of NumPy's functionality here.


Chuck
_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion

_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion
Reply | Threaded
Open this post in threaded view
|

Re: Add Chebyshev (cosine) transforms implemented via FFTs

Ben Nathanson
> scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields.

Exactly this sentence might be useful on top of the FFT page.

Is the right page reference/routines.fft.html? I can submit a PR.
_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion
Reply | Threaded
Open this post in threaded view
|

Re: Add Chebyshev (cosine) transforms implemented via FFTs

ralfgommers


On Wed, Aug 5, 2020 at 8:16 PM Ben Nathanson <[hidden email]> wrote:
> scipy.fft is a superset of numpy.fft, and the functionality included in NumPy is really only the basics that are needed in many fields.

Exactly this sentence might be useful on top of the FFT page.

Is the right page reference/routines.fft.html? I can submit a PR.

A PR would be great, thanks Ben. And yes, that's the right page.

Cheers,
Ralf

_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion

_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion
Reply | Threaded
Open this post in threaded view
|

Re: Add Chebyshev (cosine) transforms implemented via FFTs

Chris Val
In reply to this post by Stephan Hoyer-2
Stephan Hoyer-2 wrote
> On Tue, Aug 4, 2020 at 6:10 PM Charles R Harris &lt;

> charlesr.harris@

> &gt;
> wrote:
>
>>
>>
>> On Tue, Aug 4, 2020 at 4:55 AM Ralf Gommers &lt;

> ralf.gommers@

> &gt;
>> wrote:
>>
>>>
>>>
>>> On Tue, Aug 4, 2020 at 1:49 AM Chris Vavaliaris &lt;

> cv1038@.unh

> &gt;
>>> wrote:
>>>
>>>> PR #16999: https://github.com/numpy/numpy/pull/16999
>>>>
>>>> Hello all,
>>>> this PR adds the two 1D Chebyshev transform functions `chebyfft` and
>>>> `ichebyfft` into the `numpy.fft` module, utilizing the real FFTs `rfft`
>>>> and
>>>> `irfft`, respectively. As far as I understand, `pockefft` does not
>>>> support
>>>> cosine transforms natively; for this reason, an even extension of the
>>>> input
>>>> vector is constructed, whose real FFT corresponds to a cosine
>>>> transform.
>>>>
>>>> The motivation behind these two additions is the ability to quickly
>>>> perform
>>>> direct and inverse Chebyshev transforms with `numpy`, without the need
>>>> to
>>>> write scripts that do the necessary (although minor) modifications.
>>>> Chebyshev transforms are used often e.g. in the spectral integration of
>>>> PDE
>>>> problems; thus, I believe having them implemented in `numpy` would be
>>>> useful
>>>> to many people in the community.
>>>>
>>>> I'm happy to get comments/feedback on this feature, and on whether it's
>>>> something more people would be interested in. Also, I'm not entirely
>>>> sure
>>>> what part of this functionality is/isn't present in `scipy`, so that
>>>> the
>>>> two
>>>> `fft` modules remain consistent with one another.
>>>>
>>>
>>> Hi Chris, that's a good question. scipy.fft is a superset of numpy.fft,
>>> and the functionality included in NumPy is really only the basics that
>>> are
>>> needed in many fields. The reason for the duplication stems from way
>>> back
>>> when we had no wheels and SciPy was very hard to install. So I don't
>>> think
>>> there's anything we'd add to numpy.fft at this point.
>>>
>>> As I commented on your PR, it would be useful to add some references and
>>> applications, and then make your proposal on the scipy-dev list.
>>>
>>>
>> Chebfun &lt;https://github.com/chebfun/chebfun&gt; is based around this
>> method,
>> they use series with possibly thousands of terms. Trefethen is a big fan
>> of
>> Chebyshev polynomials.
>>
>
> I am quite sure that Chebyshev transforms are useful, but it does feel
> like
> something more directly suitable for SciPy than NumPy. The current
> division
> for submodules like numpy.fft/scipy.fft and numpy.linalg/scipy.linalg
> exists for outdated historical reasons, but at this point it is easiest
> for
> users to understand if has SciPy has a strict superset of NumPy's
> functionality here.
>
>
> Chuck
>> _______________________________________________
>> NumPy-Discussion mailing list
>>

> NumPy-Discussion@

>> https://mail.python.org/mailman/listinfo/numpy-discussion
>>
>
> _______________________________________________
> NumPy-Discussion mailing list

> NumPy-Discussion@

> https://mail.python.org/mailman/listinfo/numpy-discussion

Thank you all for the replies and feedback! I now have a better
understanding of the differences between the NumPy and SciPy FFT modules; it
certainly looks like SciPy would be a more appropriate place for such a
feature.

> Chebfun is based around this method, they use series with possibly
> thousands of terms. Trefethen is a big fan of Chebyshev polynomials.
>
> Chuck

Thank you Chuck for your comment; yes I'm aware of Chebfun and of
Trefethen's work in general, it's mostly the work of his and some of his
past grad students that got me interested in Chebyshev methods in the first
place!

Chris




--
Sent from: http://numpy-discussion.10968.n7.nabble.com/
_______________________________________________
NumPy-Discussion mailing list
[hidden email]
https://mail.python.org/mailman/listinfo/numpy-discussion