Skip to main content

Python non-uniform fast Fourier transform (PyNUFFT)

Project description

PyNUFFT: Python non-uniform fast Fourier transform

A minimal "getting start" tutorial is available at http://jyhmiinlin.github.io/pynufft/ .

Installation

$ pip install pynufft --user

Using Numpy/Scipy

$ python
Python 3.6.11 (default, Aug 23 2020, 18:05:39) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pynufft import NUFFT
>>> import numpy
>>> A = NUFFT()
>>> om = numpy.random.randn(10,2)
>>> Nd = (64,64)
>>> Kd = (128,128)
>>> Jd = (6,6)
>>> A.plan(om, Nd, Kd, Jd)
0
>>> x=numpy.random.randn(*Nd)
>>> y = A.forward(x)

Using PyCUDA

>>> from pynufft import NUFFT, helper
>>> import numpy
>>> A2= NUFFT(helper.device_list()[0])
>>> A2.device
<reikna.cluda.cuda.Device object at 0x7f9ad99923b0>
>>> om = numpy.random.randn(10,2)
>>> Nd = (64,64)
>>> Kd = (128,128)
>>> Jd = (6,6)
>>> A2.plan(om, Nd, Kd, Jd)
0
>>> x=numpy.random.randn(*Nd)
>>> y = A2.forward(x)

Using NUDFT (double precision)

Some users ask for double precision. NUDFT is offered.

>>> from pynufft import  NUDFT
>>> import numpy
>>> x=numpy.random.randn(*Nd)
>>> A = NUDFT()
>>> A.plan(om, Nd)
>>> y_cpu = A.forward(x)

Testing GPU acceleration

Python 3.6.11 (default, Aug 23 2020, 18:05:39) 
[GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pynufft import tests
>>> tests.test_init(0)
device name =  <reikna.cluda.cuda.Device object at 0x7f41d4098688>
0.06576069355010987
0.006289639472961426
error gx2= 2.0638987e-07
error gy= 1.0912560261408778e-07
acceleration= 10.455399523742015
17.97926664352417 2.710083246231079
acceleration in solver= 6.634211944790991

Comparisons

On the RRSG challenge of reproducible research in ISMRM 2019

The RRSG Challenge aims to reproduce the CG-SENSE paper (Pruessmann KP, Weiger M, Börnert P, Boesiger P. Advances in Sensitivity Encoding With Arbitrary k-Space Trajectories. Magnetic Resonance in Medicine 2001;(46):638–651.).

Actually, PyNUFFT does not fail in this challenge. Our result is as follows. (The code is available on request)

The basic idea is to extract the coil sensitivity profiles from the center of k-space (as the ACS in ESPIRiT).

The problem is ill-conditioned. The square root of the sampling-density compensation function D1/2 is needed.

A nice feature about Scipy/Numpy is that we can build a scipy.sparse.LinearOperator.

This LinearOperator allows the problem to be solved by scipy.sparse.linalg.lsmr or scipy.sparse.linalg.lsqr. (Normal equation is not used in this case)

Contact information

J.-M. Lin email: pynufft@gamil.com

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pynufft-2020.2.5.1.tar.gz (11.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pynufft-2020.2.5.1-py3-none-any.whl (16.2 MB view details)

Uploaded Python 3

File details

Details for the file pynufft-2020.2.5.1.tar.gz.

File metadata

  • Download URL: pynufft-2020.2.5.1.tar.gz
  • Upload date:
  • Size: 11.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.11

File hashes

Hashes for pynufft-2020.2.5.1.tar.gz
Algorithm Hash digest
SHA256 608f7bf988864d2da7be661d5c3f7c18e4cb541eee1356dd1eb1de262471545e
MD5 8a16c26681a32bdac2f93c05df696a31
BLAKE2b-256 22bcc751d68771f84142fc27911c1ab51de32892714f148e1bf3d089cc64bd62

See more details on using hashes here.

File details

Details for the file pynufft-2020.2.5.1-py3-none-any.whl.

File metadata

  • Download URL: pynufft-2020.2.5.1-py3-none-any.whl
  • Upload date:
  • Size: 16.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.6.11

File hashes

Hashes for pynufft-2020.2.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 70aaad5f0b67ad6e62fa4e985cc4d90ac51b3c14b51af40a744b05f250e18ec6
MD5 68c942962e6149148bedf932dc8288bb
BLAKE2b-256 fb095841534c20bcac097c2e38c1d4fa421d350e25bfdfae9eef0a6632afe517

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page