{"id":13574462,"url":"https://github.com/pynufft/pynufft","last_synced_at":"2026-02-18T22:02:17.577Z","repository":{"id":41548615,"uuid":"49985083","full_name":"pynufft/pynufft","owner":"pynufft","description":"PyNUFFT: Python non-uniform fast Fourier transform","archived":false,"fork":false,"pushed_at":"2025-10-28T12:29:06.000Z","size":40487,"stargazers_count":208,"open_issues_count":2,"forks_count":26,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-12-02T07:59:11.845Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://github.com/jyhmiinlin/pynufft","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pynufft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-01-19T21:41:26.000Z","updated_at":"2025-12-01T12:15:12.000Z","dependencies_parsed_at":"2025-12-14T02:13:13.255Z","dependency_job_id":null,"html_url":"https://github.com/pynufft/pynufft","commit_stats":{"total_commits":1,"total_committers":1,"mean_commits":1.0,"dds":0.0,"last_synced_commit":"cb91962462d016740caf354f911e2a1693e19469"},"previous_names":["pynufft/pynufft"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/pynufft/pynufft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pynufft%2Fpynufft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pynufft%2Fpynufft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pynufft%2Fpynufft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pynufft%2Fpynufft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pynufft","download_url":"https://codeload.github.com/pynufft/pynufft/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pynufft%2Fpynufft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29596329,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T20:59:56.587Z","status":"ssl_error","status_checked_at":"2026-02-18T20:58:41.434Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T15:00:51.800Z","updated_at":"2026-02-18T22:02:17.560Z","avatar_url":"https://github.com/pynufft.png","language":"Python","funding_links":[],"categories":["Table of Contents"],"sub_categories":["AI - Frameworks and Toolkits"],"readme":"# PyNUFFT: Python non-uniform fast Fourier transform\n\n\n\u003ca href='http://pynufft.readthedocs.org/en/latest/?badge=latest'\u003e\n  \u003cimg src='https://readthedocs.org/projects/pynufft/badge/?version=latest' alt='Documentation Status' /\u003e\n\u003c/a\u003e\n\n\n![](g5738.jpeg)\n\n\nA minimal \"getting start\" tutorial is available at https://pynufft.readthedocs.io/en/latest/index.html . This package reimplements the min-max interpolator (Fessler, Jeffrey A., and Bradley P. Sutton. \"Nonuniform fast Fourier transforms using min-max interpolation.\" IEEE transactions on signal processing 51.2 (2003): 560-574.) for Python.\n\n\n## Installation\n\n$ pip3 install pynufft --user\n\n\n### Using Numpy/Scipy\n\n```\n$ python\nPython 3.6.11 (default, Aug 23 2020, 18:05:39) \n[GCC 7.5.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e from pynufft import NUFFT\n\u003e\u003e\u003e import numpy\n\u003e\u003e\u003e A = NUFFT()\n\u003e\u003e\u003e om = numpy.random.randn(10,2)\n\u003e\u003e\u003e Nd = (64,64)\n\u003e\u003e\u003e Kd = (128,128)\n\u003e\u003e\u003e Jd = (6,6)\n\u003e\u003e\u003e A.plan(om, Nd, Kd, Jd)\n0\n\u003e\u003e\u003e x=numpy.random.randn(*Nd)\n\u003e\u003e\u003e y = A.forward(x)\n```\n\n### Using PyCUDA\n\n```\n\u003e\u003e\u003e from pynufft import NUFFT, helper\n\u003e\u003e\u003e import numpy\n\u003e\u003e\u003e A2= NUFFT(helper.device_list()[0])\n\u003e\u003e\u003e A2.device\n\u003creikna.cluda.cuda.Device object at 0x7f9ad99923b0\u003e\n\u003e\u003e\u003e om = numpy.random.randn(10,2)\n\u003e\u003e\u003e Nd = (64,64)\n\u003e\u003e\u003e Kd = (128,128)\n\u003e\u003e\u003e Jd = (6,6)\n\u003e\u003e\u003e A2.plan(om, Nd, Kd, Jd)\n0\n\u003e\u003e\u003e x=numpy.random.randn(*Nd)\n\u003e\u003e\u003e y = A2.forward(x)\n```\n\n### Using Pytorch CPU (experimental)\n```\n\u003e\u003e\u003e from pynufft import NUFFT_torch, helper\n\u003e\u003e\u003e import numpy\n\u003e\u003e\u003e A2= NUFFT_torch()\n\u003e\u003e\u003e A2= NUFFT_torch()\nKeyboardInterrupt\n\u003e\u003e\u003e om = numpy.random.randn(10,2)\n\u003e\u003e\u003e Nd = (64,64)\n\u003e\u003e\u003e Kd = (128,128)\n\u003e\u003e\u003e Jd = (6,6)\n\u003e\u003e\u003e A2.plan(om, Nd, Kd, Jd)\n0\n\u003e\u003e\u003e x=numpy.random.randn(*Nd)\n\u003e\u003e\u003e y = A2.forward(x)\n\u003e\u003e\u003e x2 = A2.adjoint(y)\n\u003e\u003e\u003e x2.shape\ntorch.Size([64, 64])\n\u003e\u003e\u003e y.shape\ntorch.Size([10])\n```\n\n### Using TensorFlow CPU Eager mode (experimental)\n```\n\u003e\u003e\u003e from pynufft import NUFFT_tf_eager, helper\n\u003e\u003e\u003e import numpy\n\u003e\u003e\u003e A2= NUFFT_tf_eager()\n\u003e\u003e\u003e om = numpy.random.randn(10,2)\n\u003e\u003e\u003e A2.plan(om, Nd, Kd, Jd)\n2022-09-05 12:19:33.954058: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA\nTo enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n0\n\u003e\u003e\u003e x=numpy.random.randn(*Nd)\n\u003e\u003e\u003e y = A2.forward(x)\n\u003e\u003e\u003e x2 = A2.adjoint(y)\n\u003e\u003e\u003e x2.shape \nTensorShape([64, 64])\n\u003e\u003e\u003e y.shape\nTensorShape([10])\n```\n\n\n## Testing GPU acceleration\n\n```\nPython 3.6.11 (default, Aug 23 2020, 18:05:39) \n[GCC 7.5.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e from pynufft import tests\n\u003e\u003e\u003e tests.test_init(0)\ndevice name =  \u003creikna.cluda.cuda.Device object at 0x7f41d4098688\u003e\n0.06576069355010987\n0.006289639472961426\nerror gx2= 2.0638987e-07\nerror gy= 1.0912560261408778e-07\nacceleration= 10.455399523742015\n17.97926664352417 2.710083246231079\nacceleration in solver= 6.634211944790991\n```\n\n## Test Torch, TensorFlow and cupy (experimental)\n\n```\nPython 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e from pynufft import tests as t\n\u003e\u003e\u003e t.test_torch()\n/home/sram/.local/lib/python3.10/site-packages/pynufft-2022.2.3rc1-py3.10.egg/pynufft/tests/test_torch.py:173: UserWarning: Module pynufft was already imported from /home/sram/.local/lib/python3.10/site-packages/pynufft-2022.2.3rc1-py3.10.egg/pynufft/__init__.py, but /home/sram/github/pynufft_online is being added to sys.path\n  import pkg_resources\nForward Error between torch and numpy 1.5022443208777513e-07\nAdjoint Error between torch and numpy 2.091061e-07\n\u003e\u003e\u003e t.test_tf_eager()\n2022-09-05 12:15:50.556015: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 FMA\nTo enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\nForward error between tf and numpy 1.801203473553717e-06\nAdjoint Error between tf and numpy 3.861161e-06\n\u003e\u003e\u003e t.test_cupy()\nForward Error between cupy and numpy 2.2403478444672691e-07\nAdjoint Error between cupy and numpy 2.1125161308793866e-07\n```\n\n### Comparisons\n\n![](comparison.png)\n\nThe comparison may not imply the clinical quality of third-party packages.\n\n### Contact information\nIf you have professional requests related to the project, please contact\nemail: pynufft@gmail.com\n\n### Recent NUFFT functions available in Python\n\nYou can also find other very useful Python nufft/nfft functions at:\n\n1. SigPy (Ong, F., and M. Lustig. \"SigPy: a python package for high performance iterative reconstruction.\" Proceedings of the ISMRM 27th Annual Meeting, Montreal, Quebec, Canada. Vol. 4819. 2019. Note the order starts from the last axi\u003e\n2. gpuNUFFT: (Knoll, Florian, et al. \"gpuNUFFT-an open source GPU library for 3D regridding with direct Matlab interface.\" Proceedings of the 22nd annual meeting of ISMRM, Milan, Italy. 2014.): https://github.com/andyschwarzl/gpuNUFFT/\u003e\n3. mrrt.nufft (mrrt.mri demos for the ISMRM 2020 Data Sampling Workshop in Sedona, AZ with raw cuda kernels): https://github.com/mritools/mrrt.nufft\n4. pyNFFT (Keiner, J., Kunis, S., and Potts, D. ''Using NFFT 3 - a software library for various nonequispaced fast Fourier transforms'' ACM Trans. Math. Software,36, Article 19, 1-30, 2009. The python wrapper of NFFT): https://pythonho\u003e\n5. python-NUFFT: Please see: https://github.com/dfm/python-nufft, \"Python bindings by Dan Foreman-Mackey, Thomas Arildsen, and Marc T. Henry de Frahan but the code that actually does the work is from the Greengard lab at NYU (see the w\u003e\n6. finufft (Barnett, Alexander H., Jeremy Magland, and Ludvig af Klinteberg. \"A Parallel Nonuniform Fast Fourier Transform Library Based on an “Exponential of Semicircle\" Kernel.\" SIAM Journal on Scientific Computing 41.5 (2019): C479-\u003e\n7. torchkbnufft (M. J. Muckley, R. Stern, T. Murrell, F. Knoll, TorchKbNufft: A High-Level, Hardware-Agnostic Non-Uniform Fast Fourier Transform, 2020 ISMRM Workshop on Data Sampling and Image Reconstruction): https://github.com/mmuckl\u003e\n8. tfkbnufft (adapt torchkbnufft for TensorFlow): https://github.com/zaccharieramzi/tfkbnufft\n9. TFNUFFT (adapt the min-max interpolator in PyNUFFT for tensorflow): https://github.com/yf0726/TFNUFFT\n10. tensorflow-nufft: https://github.com/mrphys/tensorflow-nufft\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpynufft%2Fpynufft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpynufft%2Fpynufft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpynufft%2Fpynufft/lists"}