Tính toán khoa học với các dự án python

SciPy là một thư viện máy tính khoa học mã nguồn mở dành cho ngôn ngữ lập trình Python. Kể từ lần phát hành đầu tiên vào năm 2001, SciPy đã trở thành một tiêu chuẩn thực tế để tận dụng các thuật toán khoa học trong Python, với hơn 600 người đóng góp mã duy nhất, hàng nghìn gói phụ thuộc, hơn 100.000 kho lưu trữ phụ thuộc và hàng triệu lượt tải xuống mỗi năm. Trong công việc này, chúng tôi cung cấp tổng quan về các khả năng và thực tiễn phát triển của SciPy 1. 0 và nêu bật một số phát triển kỹ thuật gần đây

Show

Chính

SciPy là một thư viện gồm các quy trình số cho ngôn ngữ lập trình Python cung cấp các khối xây dựng cơ bản để lập mô hình và giải quyết các vấn đề khoa học. SciPy bao gồm các thuật toán để tối ưu hóa, tích hợp, nội suy, bài toán giá trị riêng, phương trình đại số, phương trình vi phân và nhiều loại bài toán khác; . SciPy được xây dựng trên NumPy1,2, cung cấp cấu trúc dữ liệu mảng và các quy trình số nhanh có liên quan, và chính SciPy là nền tảng để xây dựng các thư viện khoa học cấp cao hơn, bao gồm scikit-learn3 và scikit-image4. Các nhà khoa học, kỹ sư và những người khác trên khắp thế giới dựa vào SciPy. Ví dụ: các tập lệnh đã xuất bản5,6 được sử dụng trong phân tích sóng hấp dẫn7,8 nhập một số gói con của SciPy và dự án chụp ảnh lỗ đen M87 trích dẫn SciPy9

Gần đây, SciPy đã phát hành phiên bản 1. 0, một cột mốc theo truyền thống báo hiệu API của thư viện (giao diện lập trình ứng dụng) đủ trưởng thành để được tin cậy trong các quy trình sản xuất. Tuy nhiên, quy ước đánh số phiên bản này phủ nhận lịch sử của một dự án đã trở thành tiêu chuẩn mà những người khác tuân theo và đã được áp dụng rộng rãi trong nghiên cứu và công nghiệp

Sự xuất hiện của SciPy vào thời điểm này thật đáng ngạc nhiên và hơi bất thường. Khi bắt đầu hoạt động vào năm 2001, thư viện có rất ít kinh phí và chủ yếu được viết bởi các sinh viên đã tốt nghiệp—nhiều người trong số họ không được đào tạo về khoa học máy tính và thường không có sự hỗ trợ của các cố vấn. Thậm chí tưởng tượng rằng một nhóm nhỏ các lập trình viên sinh viên 'bất hảo' có thể nâng đỡ hệ sinh thái phần mềm nghiên cứu đã được thiết lập tốt—được hỗ trợ bởi hàng triệu đô la tài trợ và hàng trăm kỹ sư có trình độ cao10,11,12—là điều vô lý

Tuy nhiên, các động lực triết học đằng sau một ngăn xếp công cụ hoàn toàn mở, kết hợp với một cộng đồng thân thiện, hào hứng với một trọng tâm duy nhất, đã được chứng minh là tốt lành trong thời gian dài. Chúng không chỉ dẫn đến thư viện được mô tả trong bài viết này mà còn dẫn đến toàn bộ hệ sinh thái các gói liên quan (https. //wiki. con trăn. org/moin/NumericAndScientific) và nhiều hoạt động xã hội xoay quanh họ (https. //wiki. con trăn. org/moin/PythonConferences). Các gói trong hệ sinh thái SciPy chia sẻ các tiêu chuẩn cao về triển khai, tài liệu và thử nghiệm, và một nền văn hóa háo hức học hỏi và áp dụng các phương pháp thực hành tốt hơn—cả về quản lý cộng đồng và phát triển phần mềm

Tiểu sử

Ở đây chúng tôi ghi lại lịch sử có chọn lọc của một số cột mốc và sự kiện quan trọng trong quá trình phát triển của SciPy. Bất chấp những gì chúng tôi nhấn mạnh ở đây, điều quan trọng là phải hiểu rằng một dự án như SciPy chỉ có thể thực hiện được nhờ có sự đóng góp của rất nhiều người đóng góp—quá nhiều người để đề cập riêng lẻ, nhưng mỗi người mang lại một phần quan trọng cho câu đố

Python là ngôn ngữ lập trình máy tính đa năng, cấp cao, được thông dịch, được thiết kế bởi Guido van Rossum vào cuối những năm 1980, với hệ thống kiểu động và nhấn mạnh vào khả năng đọc và tạo mẫu nhanh13 (https. //github. com/trăn/cpython). Là một ngôn ngữ lập trình có mục đích chung, nó không có hỗ trợ đặc biệt cho các cấu trúc dữ liệu hoặc thuật toán khoa học, không giống như nhiều nền tảng tính toán đã được thiết lập khác vào thời điểm đó. Tuy nhiên, các nhà khoa học đã sớm phát hiện ra những ưu điểm của ngôn ngữ này, chẳng hạn như khả năng bao bọc các thư viện C và Fortran, sau đó điều khiển các thư viện đó một cách tương tác. Do đó, các nhà khoa học có thể có quyền truy cập vào nhiều thư viện tính toán hiện có mà không cần quan tâm đến các khái niệm lập trình cấp thấp như quản lý bộ nhớ

Năm 1995, Jim Hugunin, một sinh viên tốt nghiệp tại Học viện Công nghệ Massachusetts, đã viết thông điệp đầu tiên trong danh sách gửi thư mới của Python Matrix Special Interest Group (Matrix-SIG)14

“Dường như có một lượng lớn sự quan tâm trong cộng đồng Python liên quan đến việc bổ sung các phép toán số vào Python. Mong muốn của riêng tôi là có sẵn một thư viện hàm dựa trên ma trận càng lớn càng tốt (đại số tuyến tính, hàm riêng, xử lý tín hiệu, thống kê, v.v. ). Để đảm bảo rằng tất cả các thư viện này tương thích với nhau, cần có sự thống nhất về một đối tượng ma trận cơ bản có thể được sử dụng để biểu diễn các mảng số. ”

Trong vài tháng tới, các cuộc trò chuyện trong danh sách gửi thư đó, trong số những người khác, Jim Fulton, Jim Hugunin, Paul Dubois, Konrad Hinsen và Guido van Rossum đã dẫn đến việc tạo ra một gói có tên Numeric với một đối tượng mảng hỗ trợ nhiều . Jim Hugunin giải thích tiện ích của Python để tính toán số15

“Tôi đã sử dụng gần như tất cả các ngôn ngữ số có sẵn lúc này hay lúc khác trong 8 năm qua. Một điều tôi nhận thấy là theo thời gian, các nhà thiết kế của những ngôn ngữ này đang dần bổ sung thêm nhiều tính năng mà người ta mong đợi tìm thấy trong một ngôn ngữ lập trình có mục đích chung. ”

Đây vẫn là một tính năng phân biệt của Python đối với khoa học và là một trong những lý do tại sao nó lại thành công như vậy trong lĩnh vực khoa học dữ liệu. thay vì thêm các tính năng chung vào ngôn ngữ được thiết kế cho tính toán số và khoa học, ở đây các tính năng khoa học được thêm vào ngôn ngữ có mục đích chung. Điều này mở rộng phạm vi của các vấn đề có thể được giải quyết dễ dàng, mở rộng các nguồn dữ liệu có thể truy cập dễ dàng và tăng quy mô của cộng đồng phát triển mã cho nền tảng

khoa học viễn tưởng bắt đầu

Đến cuối những năm 1990, các cuộc thảo luận xuất hiện trên Matrix-SIG thể hiện mong muốn có một môi trường phân tích dữ liệu khoa học hoàn chỉnh16. Travis Oliphant, một nghiên cứu sinh tiến sĩ tại Mayo Clinic, đã phát hành một số gói17,18 được xây dựng dựa trên gói mảng Numeric và cung cấp các thuật toán để xử lý tín hiệu, các hàm đặc biệt, ma trận thưa thớt, cầu phương, tối ưu hóa, biến đổi Fourier nhanh, v.v. Một trong những gói này, Multipack (http. // pylab. nguồn. mạng/nhiều gói. html), là một tập hợp các mô-đun mở rộng bao bọc các thư viện Fortran và C để giải các phương trình phi tuyến tính và các bài toán bình phương nhỏ nhất, tích hợp các phương trình vi phân và khớp splines. Robert Kern, khi đó là sinh viên đại học (và hiện là nhà phát triển cốt lõi của SciPy), đã cung cấp hướng dẫn biên dịch trong Windows. Cũng trong khoảng thời gian đó, Pearu Peterson, một nghiên cứu sinh tiến sĩ từ Estonia, đã phát hành F2PY19, một công cụ dòng lệnh để liên kết mã Python và Fortran, đồng thời viết các mô-đun cho đại số tuyến tính và phép nội suy. Eric Jones, khi còn là sinh viên tốt nghiệp tại Đại học Duke, đã viết các gói để hỗ trợ luận văn của mình, bao gồm một công cụ lập lịch trình công việc song song và trình tối ưu hóa di truyền. Gary Strangman, một nghiên cứu sinh sau tiến sĩ tại Trường Y Harvard, đã xuất bản một số thói quen thống kê mô tả và suy luận20

Với một môi trường lập trình phong phú và một đối tượng mảng số đã sẵn sàng, thời điểm đã chín muồi để phát triển một ngăn xếp phần mềm khoa học đầy đủ. Năm 2001, Eric Jones và Travis Vaught thành lập Enthought Scientific Computing Solutions (nay là Enthought, Inc. ) ở Austin, Texas, Mỹ. Để đơn giản hóa ngăn xếp công cụ, họ đã tạo dự án SciPy, xoay quanh thư viện SciPy, dự án này sẽ gộp tất cả các gói nêu trên. Dự án mới nhanh chóng đạt được động lực, với một trang web và kho lưu trữ mã21 xuất hiện vào tháng 2 và một danh sách gửi thư22 được công bố vào tháng 6 năm 2001. Đến tháng 8 năm 2001, một bản phát hành đầu tiên đã được công bố23, một đoạn trích được trình bày trong Hộp 1. Vào tháng 9, tài liệu đầu tiên được xuất bản24. Hội thảo SciPy đầu tiên25 được tổ chức vào tháng 9 năm 2002 tại Caltech—một sự kiện duy nhất kéo dài hai ngày với 50 người tham gia, nhiều người trong số họ là nhà phát triển của SciPy và các thư viện xung quanh

Tại thời điểm này, Python khoa học bắt đầu thu hút sự chú ý nghiêm túc hơn; . Ví dụ, Paul Dubois tại Phòng thí nghiệm Quốc gia Lawrence Livermore (LLNL) đã đảm nhận việc bảo trì Numeric và tài trợ cho việc viết hướng dẫn sử dụng26, và Viện Khoa học Kính viễn vọng Không gian (STScI), cơ quan phụ trách các hoạt động khoa học của Kính viễn vọng Không gian Hubble, đã quyết định . Khi STScI tiếp tục sử dụng Python cho một phần ngày càng lớn của quy trình phân tích dữ liệu của Kính viễn vọng Không gian Hubble, họ đã gặp sự cố với bộ chứa mảng số Python. Numeric, gói mảng ban đầu, phù hợp với các mảng nhỏ, nhưng không phù hợp với các hình ảnh lớn được xử lý bởi STScI. Với sự ủng hộ của người bảo trì Numeric, quyết định đã được đưa ra để viết NumArray28, một thư viện có thể xử lý dữ liệu ở quy mô lớn hơn. Thật không may, NumArray tỏ ra không hiệu quả đối với các mảng nhỏ, mang đến cho cộng đồng một lựa chọn khá đáng tiếc. Năm 2005, Travis Oliphant đã kết hợp những yếu tố tốt nhất của Numeric và NumArray, nhờ đó giải quyết được vấn đề nan giải. NumPy 1. 0 được phát hành29 vào tháng 10 năm 2006, mở đường cho cộng đồng Python khoa học thống nhất trưởng thành

SciPy đáo hạn

Vào giữa đến cuối những năm 2000, SciPy bắt đầu trưởng thành sau một giai đoạn dài tăng trưởng và áp dụng đáng kể. Phạm vi của thư viện SciPy bị thu hẹp, trong khi bề rộng của hệ sinh thái phát triển thông qua một loại gói phụ trợ mới. các scikit (https. //www. scipy. org/scikits. html), một thư viện bổ sung được phát triển bên ngoài SciPy, cho phép khám phá nhanh hơn các ý tưởng thử nghiệm trong khi vẫn duy trì phương pháp phát triển và phong cách quen thuộc. Trong chính SciPy, các quy trình công cụ, phát triển, tài liệu và phát hành đã trở nên chuyên nghiệp hơn. Thư viện đã được mở rộng một cách cẩn thận, với sự kiên nhẫn hợp lý trong các dự án nguồn mở và thông qua các phương pháp hay nhất, ngày càng phổ biến trong hệ sinh thái Python khoa học và ngành công nghiệp30

Các phiên bản đầu tiên của SciPy có tài liệu tối thiểu, nhưng điều này bắt đầu thay đổi với bản phát hành năm 2006 của Hướng dẫn về NumPy1. Vào năm 2007, Sphinx31 đã có thể tự động kết xuất các tài liệu siêu văn bản và PDF từ văn bản thuần túy (các chuỗi tài liệu) xen kẽ với mã Python và vào năm 2008, pydocweb 32 đã được kích hoạt . Dự án Tài liệu SciPy33,34 đã sử dụng các công cụ này để hoàn thành tài liệu về chức năng hướng tới người dùng của SciPy. cung cấp áo phông cho những người đóng góp từ khắp nơi trên thế giới để đổi lấy văn bản chất lượng cao, nó đã thu thập sự đóng góp từ hơn 75 người để tạo ra một cuốn sách hướng dẫn dài 884 trang35. Kể từ đó, SciPy vẫn cam kết duy trì tài liệu chất lượng cao như một phần của chu trình phát triển thông thường.

Trong các hội thảo SciPy đầu tiên, các chủ đề lặp đi lặp lại phản ánh tình trạng phát triển, với sự nhấn mạnh được đặt vào gói mảng cơ bản, sơ đồ, xử lý song song, tăng tốc/gói và giao diện người dùng. Đến năm 2004, các bài thuyết trình về ứng dụng của SciPy cho các vấn đề khoa học bắt đầu xuất hiện. Sự kiện này cũng bắt đầu thu hút thêm nhiều diễn giả chính từ bên ngoài cộng đồng, chẳng hạn như Guido van Rossum (người tạo ra Python, 2006), Ivan Krstić (Mỗi đứa trẻ một máy tính xách tay, 2007), Alex Martelli (Google, 2008) và Peter Norvig ( . Hội thảo không chính thức đã phát triển từ một nhóm nhỏ các nhà phát triển cốt lõi thành một hội nghị quốc tế với hàng trăm người tham dự, tăng kinh phí, một kỷ yếu được xuất bản và học bổng cho sinh viên tham dự. Đến năm 2010, hội nghị SciPy của Hoa Kỳ đã có nhiều tuyến đường và các hội nghị vệ tinh đã được tổ chức bởi các tình nguyện viên ở những nơi khác, chẳng hạn như EuroSciPy (từ năm 2008) và SciPy Ấn Độ (từ năm 2009). Các phiên đặc biệt và hội nghị chuyên đề nhỏ dành riêng cho Python khoa học bắt đầu xuất hiện tại nhiều sự kiện khác. Ví dụ, một hội nghị chuyên đề nhỏ gồm ba phần được tổ chức cho Hội nghị Quốc tế về Khoa học và Kỹ thuật Tính toán (CSE) 2009 đã được đăng trên SIAM News36

Năm 2007, Python đã có một sự hiện diện mạnh mẽ trong khoa học và kỹ thuật đến mức các biên tập viên của IEEE Computing in Science and Engineering đã mời một số đặc biệt về Python trong khoa học37, do Paul Dubois biên tập. Tuy nhiên, Python vẫn đủ thích hợp để người đọc bình thường sẽ cần thêm thông tin để quyết định xem nó có hữu ích trong công việc của họ hay không. Số tiếp theo vào tháng 3/tháng 4 năm 2011 về Python dành cho các nhà khoa học và kỹ sư38 tập trung nhiều hơn vào các phần cốt lõi của hệ sinh thái Python khoa học39 bao gồm NumPy2, Cython40 và Mayavi41. Python trở nên phổ biến đến mức các tạp chí bắt đầu xuất bản các số đặc biệt dành riêng cho từng miền. Ví dụ: vào năm 2015, Frontiers in Neuroinformatics đã xuất bản một tuyển tập gồm 25 bài báo—bao gồm các chủ đề bao gồm mô hình hóa và mô phỏng, thu thập dữ liệu, điện sinh lý, trực quan hóa cũng như tạo và trình bày kích thích—được gọi là Python trong Khoa học thần kinh42

Khoa học ngày nay

Tính đến tháng 2 năm 2019, thư viện SciPy bao gồm gần 600.000 dòng mã nguồn mở được tổ chức thành 16 gói con được tóm tắt trong Hộp 2. Nhóm phát triển và cộng đồng hiện tương tác và hoạt động chủ yếu trên GitHub, một nền tảng quản lý tác vụ và kiểm soát phiên bản trực tuyến. Hơn 110.000 kho lưu trữ GitHub và 6.500 gói phụ thuộc vào SciPy43. Một số tính năng chính nổi bật từ ba năm trước SciPy 1. 0 được thảo luận trong phần “Những cải tiến kỹ thuật chính” bên dưới và các mốc quan trọng trong lịch sử của nó được đánh dấu trong Hình. 1

Quả sung. 1. Các mốc quan trọng từ lần phát hành đầu tiên của SciPy vào năm 2001 đến khi phát hành SciPy 1. 0 trong năm 2017

Tính toán khoa học với các dự án python

Lưu ý rằng SciKits và GitHub đã được giới thiệu trong phần Cơ sở; . thưa thớt scipy.sparse ) có sẵn trong phần 'Lựa chọn triển khai và kiến ​​trúc', hỗ trợ BLAS/LAPACK được trình bày chi tiết trong phần 'Cải tiến kỹ thuật chính' và tích hợp liên tục được thảo luận trong 'Bộ thử nghiệm và điểm chuẩn .

Hình ảnh kích thước đầy đủ

Hộp 1 Đoạn trích từ SciPy 0. 1 thông báo phát hành (đã sửa lỗi chính tả), đăng ngày 20 tháng 8 năm 2001 trên danh sách gửi thư Python-list

SciPy là một gói mã nguồn mở dựa trên các điểm mạnh của Python và Numeric, cung cấp nhiều chức năng khoa học và số nhanh chóng. Bộ mô-đun hiện tại của SciPy bao gồm những thứ sau

  • Các chức năng đặc biệt (Bessel, Hankel, Airy và các chức năng khác)

  • Xử lý tín hiệu/hình ảnh

  • Khả năng vẽ đồ thị 2D

  • Hội nhập

  • bộ giải ODE

  • Tối ưu hóa (đơn giản, BFGS, Newton-CG và những thứ khác)

  • giải thuật di truyền

  • Trình biên dịch biểu thức số sang C++

  • Công cụ lập trình song song

  • Splines và phép nội suy

  • Các mặt hàng khác

Hộp 2 Tổ chức trọn gói

Thư viện SciPy được tổ chức dưới dạng một tập hợp các gói con. 16 gói con bao gồm các khối xây dựng toán học (ví dụ: đại số tuyến tính, biến đổi Fourier, hàm đặc biệt), cấu trúc dữ liệu (ví dụ: ma trận thưa thớt, cây k-D), thuật toán (ví dụ: tối ưu hóa và tích hợp số, phân cụm, nội suy, thuật toán đồ thị

Ở đây chúng tôi tóm tắt phạm vi và khả năng của từng gói con. Thông tin bổ sung có sẵn trong hướng dẫn SciPy (https. // tài liệu. scipy. org/doc/scipy/reference/tutorial/) và tham chiếu API (https. // tài liệu. scipy. org/doc/scipy/tham chiếu/chỉ mục. html#api-tham chiếu)

cụm

Gói con cụm chứa cụm. vq , cung cấp thuật toán lượng tử hóa véc-tơ và k-mean, và cụm . hệ thống phân cấp , cung cấp các chức năng cho phân cụm theo cấp bậc và tổng hợp.

hằng số

Các hằng số vật lý và toán học, bao gồm các giá trị CODATA khuyến nghị của các hằng số vật lý cơ bản119

fftpack

Công thức biến đổi Fourier nhanh. Ngoài bản thân FFT, gói con bao gồm các hàm cho các phép biến đổi sin và cos rời rạc và cho các toán tử giả vi phân

tích hợp

Gói con tích phân cung cấp các công cụ để tính toán bằng số các tích phân xác định đơn và bội và giải phương trình vi phân thông thường, bao gồm cả giá trị ban đầu .

nội suy

Gói con nội suy chứa các hàm và lớp spline, các lớp nội suy một chiều và nhiều chiều (đơn biến và đa biến), Lagrange và Taylor .

io

Tập hợp các hàm và lớp để đọc và viết Matlab (https. //www. toán học. com/products/matlab. html), các tệp dữ liệu IDL, Matrix Market120, Fortran, NetCDF121, Harwell-Boeing122, WAV và ARFF

linalg

Các hàm đại số tuyến tính, bao gồm các hàm cơ bản của ma trận, chẳng hạn như số vết, định thức, chỉ tiêu và số điều kiện;

hình ảnh

Gói con này chứa các chức năng khác nhau để xử lý hình ảnh đa chiều, bao gồm tích chập và các loại bộ lọc tuyến tính và phi tuyến tính (bộ lọc Gaussian, bộ lọc trung vị, bộ lọc Sobel và các bộ lọc khác);

linh tinh

Một tập hợp các chức năng không phù hợp với các gói con khác. Mặc dù gói phụ này vẫn tồn tại trong SciPy 1. 0, một nỗ lực đang được tiến hành để loại bỏ hoặc di chuyển nội dung của gói con này và xóa nó

lẻ

Hồi quy khoảng cách trực giao, bao gồm trình bao bọc Python cho thư viện Fortran ODRPACK54

tối ưu hóa

Gói con này bao gồm các bộ giải lập trình tuyến tính điểm trong và đơn giản, triển khai nhiều thuật toán tối thiểu hóa phi tuyến, một quy trình khớp đường cong bình phương nhỏ nhất và một bộ sưu tập các bộ giải phi tuyến chung để tìm nghiệm

dấu hiệu

The signal tập trung vào xử lý tín hiệu và lý thuyết hệ thống tuyến tính cơ bản. Chức năng bao gồm tích chập và tương quan, splines, lọc và thiết kế bộ lọc, hệ thống tuyến tính thời gian liên tục và rời rạc, tạo dạng sóng, chức năng cửa sổ, tính toán wavelet, tìm đỉnh và phân tích quang phổ.

thưa thớt

Gói con này bao gồm việc triển khai một số biểu diễn của ma trận thưa thớt. scipy. thưa thớt. linalg cung cấp một tập hợp các thủ tục đại số tuyến tính hoạt động với ma trận thưa thớt, bao gồm bộ giải phương trình tuyến tính, phân tách giá trị riêng, phân tách giá trị đơn lẻ và phân tích thừa số LU. scipy. thưa thớt. csgraph cung cấp một tập hợp các thuật toán đồ thị mà đồ thị được biểu diễn bằng ma trận thưa thớt. Các thuật toán bao gồm các thành phần được kết nối, đường đi ngắn nhất, cây bao trùm tối thiểu và hơn thế nữa.

không gian

Gói con này cung cấp cấu trúc dữ liệu không gian và thuật toán, bao gồm cây k-d, phép đo tam giác Delaunay, bao lồi và sơ đồ Voronoi. scipy. không gian. distance cung cấp một tập hợp lớn các hàm khoảng cách, cùng với các hàm tính toán khoảng cách giữa tất cả các cặp vectơ trong một tập hợp điểm đã cho hoặc giữa tất cả các cặp từ hai tập hợp điểm.

đặc biệt

Cái tên này xuất phát từ lớp hàm theo truyền thống được gọi là hàm đặc biệt, nhưng theo thời gian, gói con đã phát triển để bao gồm các hàm ngoài các hàm đặc biệt cổ điển. Một đặc điểm phù hợp hơn của gói con này chỉ đơn giản là các chức năng hữu ích. Nó bao gồm một bộ sưu tập lớn các chức năng đặc biệt cổ điển như Airy, Bessel và các chức năng khác; . comb and factorial; and more.

số liệu thống kê

Gói con số liệu thống kê cung cấp một bộ sưu tập lớn các phân phối xác suất liên tục và rời rạc, mỗi phân phối có các phương pháp tính toán PDF hoặc PMF, CDF, khoảnh khắc .

Lựa chọn kiến ​​trúc và triển khai

Phạm vi dự án

SciPy cung cấp các thuật toán cơ bản cho điện toán khoa học. Phạm vi rộng của nó được rút ra từ hướng dẫn về hệ thống phân loại phần mềm toán học (GAMS) có sẵn44. Trong các lĩnh vực di chuyển tương đối chậm, chẳng hạn như đại số tuyến tính, SciPy nhằm mục đích cung cấp phạm vi bảo hiểm đầy đủ. Trong các lĩnh vực khác, nó nhằm mục đích cung cấp các khối xây dựng cơ bản đồng thời tương tác tốt với các gói khác chuyên biệt trong lĩnh vực đó. Ví dụ: SciPy cung cấp những gì người ta mong đợi tìm thấy trong sách giáo khoa thống kê (phân phối xác suất, kiểm tra giả thuyết, thống kê tần suất, hàm tương quan, v.v.), trong khi Statsmodels45 cung cấp các phương pháp suy luận và ước tính thống kê nâng cao hơn, scikit-learn3 bao gồm học máy và . //mc-stan. org) bao gồm thống kê Bayes và mô hình xác suất. scikit-image4 cung cấp khả năng xử lý hình ảnh ngoài ndimage của SciPy, SymPy48 cung cấp giao diện Python để tính toán tượng trưng và sparse. csgraphspatial cung cấp các công cụ cơ bản để làm việc với biểu đồ và mạng so với các thư viện chuyên biệt như NetworkX49.

Chúng tôi sử dụng các tiêu chí sau để xác định xem có nên đưa chức năng mới vào SciPy hay không

  • Thuật toán có liên quan đến nhiều lĩnh vực khoa học

  • Thuật toán rất quan trọng. Ví dụ, nó đủ kinh điển để được đưa vào sách giáo khoa hoặc nó dựa trên một bài báo được bình duyệt có số lượng trích dẫn đáng kể

Về hệ thống phần mềm và kiến ​​trúc, phạm vi của SciPy phù hợp với NumPy. các thuật toán cho tính toán trong bộ nhớ trên các máy đơn lẻ, với sự hỗ trợ cho nhiều loại dữ liệu và kiến ​​trúc quy trình. Điện toán phân tán và hỗ trợ cho các đơn vị xử lý đồ họa (GPU) rõ ràng nằm ngoài phạm vi tại 1. 0, nhưng điều này đã được sửa đổi trong lộ trình của chúng tôi (xem Thảo luận)

lựa chọn ngôn ngữ

Theo phân tích sử dụng thư viện nhà ngôn ngữ học (https. //github. com/github/linguist), SciPy có khoảng 50% Python, 25% Fortran, 20% C, 3% Cython và 2% C++, với một chút TeX, Matlab, shell script và Make. Việc phân phối các ngôn ngữ lập trình phụ trong SciPy là sự thỏa hiệp giữa một ngôn ngữ mạnh mẽ, nâng cao hiệu suất, tương tác tốt với Python (nghĩa là Cython) và việc sử dụng các ngôn ngữ (và thư viện của chúng) đã được chứng minh là đáng tin cậy và hoạt động hiệu quả trong nhiều thập kỷ.

Fortran, bất chấp tuổi đời của nó, vẫn là một ngôn ngữ lập trình khoa học hiệu năng cao được sử dụng liên tục trong thời hiện đại50. Vì vậy, chúng tôi gói các thư viện Fortran đã được thử nghiệm thực tế xuất sắc sau đây để mang lại sự thuận tiện cho Python đồng thời hưởng lợi từ hiệu suất của chúng. QUADPACK51 và ODEPACK52 để tích hợp số và giải các bài toán giá trị ban đầu; . 59) để tính các hàm Bessel;

Nằm trong ba ngôn ngữ hàng đầu trong SciPy là C, ngôn ngữ này cũng đã được thiết lập rất tốt trong vài thập kỷ61 của máy tính khoa học. Các thư viện C mà chúng tôi đưa vào SciPy bao gồm trlib62 để tối ưu hóa, SuperLU63,64 để giải các hệ tuyến tính thưa thớt, Qhull65 cho hình học tính toán và Cephes (http. //www. netlib. org/cephes/) cho các chức năng đặc biệt

Cython đã được mô tả là một ngôn ngữ creole kết hợp các phần tốt nhất của Python và các mô hình C/C++ cấp thấp hơn40. Chúng tôi thường sử dụng Cython như một chất kết dính giữa các thư viện máy tính khoa học cấp thấp, được thiết lập tốt được viết bằng C/C++ và giao diện Python do SciPy cung cấp. Chúng tôi cũng sử dụng Cython để kích hoạt các cải tiến hiệu suất trong mã Python, đặc biệt đối với các trường hợp vòng lặp bên trong được sử dụng nhiều được hưởng lợi từ mã được biên dịch với kiểu gõ tĩnh

Để triển khai chức năng mới, Python vẫn là ngôn ngữ được lựa chọn. Nếu hiệu suất của Python là một vấn đề, thì chúng tôi ưu tiên sử dụng Cython, sau đó là C, C++ hoặc Fortran (theo thứ tự đó). Động lực chính cho điều này là khả năng bảo trì. Cython có mức độ trừu tượng cao nhất và hầu hết các nhà phát triển Python sẽ hiểu nó. C cũng được biết đến rộng rãi và dễ quản lý hơn đối với nhóm phát triển cốt lõi hiện tại so với C ++ và đặc biệt là Fortran

Vị trí mà SciPy nắm giữ gần nền tảng của hệ sinh thái Python khoa học đến mức việc áp dụng các ngôn ngữ mới hoặc các phụ thuộc chính nói chung là khó xảy ra; . Khả năng tăng tốc GPU, các thư viện chuyển mã mới và các phương pháp biên dịch JIT mới nhất (ví dụ: Numba66) rất mạnh mẽ nhưng theo truyền thống đã nằm ngoài phạm vi của thư viện SciPy chính. Điều đó nói rằng, gần đây chúng tôi đã tăng cường nỗ lực để hỗ trợ khả năng tương thích với một số tùy chọn này và bộ thử nghiệm đầy đủ của chúng tôi đã được thông qua với trình biên dịch PyPy JIT67 vào ngày 1. 0 điểm phát hành

Sự phát triển của API và ABI

API cho SciPy bao gồm khoảng 1.500 hàm và lớp. Chính sách của chúng tôi về việc phát triển API theo thời gian là chức năng mới có thể được thêm vào, trong khi việc xóa hoặc thay đổi chức năng hiện có chỉ có thể được thực hiện nếu lợi ích vượt quá chi phí (thường là đáng kể) cho người dùng và chỉ sau khi đưa ra cảnh báo rõ ràng về việc ngừng sử dụng cho những người dùng đó đối với tại . Nói chung, chúng tôi khuyến khích các thay đổi giúp cải thiện tính rõ ràng trong API của thư viện nhưng đặc biệt không khuyến khích phá vỡ khả năng tương thích ngược, do vị trí của chúng tôi gần cơ sở của ngăn xếp máy tính Python khoa học

Ngoài API Python, SciPy còn có giao diện C và Cython. Do đó, chúng ta cũng phải xem xét giao diện nhị phân ứng dụng (ABI). ABI này đã ổn định trong một thời gian dài và chúng tôi đặt mục tiêu chỉ phát triển nó theo cách tương thích ngược

Cải tiến kỹ thuật chính

Ở đây chúng tôi mô tả những cải tiến kỹ thuật quan trọng được thực hiện trong ba năm qua

Cấu trúc dữ liệu

ma trận thưa thớt

scipy. thưa thớt cung cấp bảy cấu trúc dữ liệu ma trận thưa thớt, còn được gọi là định dạng thưa thớt. Những cái quan trọng nhất là định dạng nén hàng và cột (CSR và CSC, tương ứng). Chúng cung cấp khả năng lập chỉ mục trục chính nhanh và phép nhân vectơ ma trận nhanh, đồng thời được sử dụng nhiều trong SciPy và các gói phụ thuộc

Trong ba năm qua, các phần bên trong xử lý ma trận thưa thớt của chúng tôi đã được viết lại và hiệu suất đã được cải thiện. Lặp lại và cắt các ma trận CSC và CSR hiện nhanh hơn tới 35% và tốc độ chuyển đổi định dạng tọa độ (COO)/đường chéo (DIA) sang CSR/CSC đã tăng lên. SuperLU63 đã được cập nhật lên phiên bản 5. 2. 1, tăng cường triển khai cấp thấp được tận dụng bởi một tập hợp con các dịch vụ thưa thớt của chúng tôi.

Từ quan điểm tính năng mới, scipy. thưa thớt ma trận và toán tử tuyến tính hiện hỗ trợ toán tử nhân ma trận Python ( @ ). Chúng tôi đã thêm scipy. thưa thớt. định mứcscipy. thưa thớt. ngẫu nhiên để tính toán các chỉ tiêu ma trận thưa thớt và vẽ các biến ngẫu nhiên tương ứng từ các phân phối tùy ý. Ngoài ra, chúng tôi đã nỗ lực phối hợp để mang đến scipy. thưa thớt API phù hợp với API NumPy tương đương nếu có thể.

cKDTree

scipy . không gian. Mô-đun ckdtree , triển khai cấu trúc dữ liệu phân vùng không gian tổ chức các điểm trong không gian k chiều, được viết lại bằng C++ với các lớp mẫu. Hỗ trợ đã được thêm vào cho các điều kiện biên định kỳ, thường được sử dụng trong mô phỏng các quá trình vật lý.

Vào năm 2013, độ phức tạp về thời gian của tìm kiếm k-láng giềng gần nhất từ ​​ cKDTree. truy vấn xấp xỉ loglinear68, phù hợp với mô tả chính thức của nó69. Kể từ đó, chúng tôi đã nâng cao cKDTree. truy vấn bằng cách triển khai lại nó trong C++, loại bỏ rò rỉ bộ nhớ và cho phép giải phóng khóa trình thông dịch toàn cục (GIL) để có thể sử dụng nhiều luồng70. Điều này nói chung đã cải thiện hiệu suất đối với bất kỳ vấn đề cụ thể nào trong khi vẫn duy trì độ phức tạp tiệm cận.

Vào năm 2015, SciPy đã thêm quy trình sparse_ distance_matrix để tạo ma trận khoảng cách thưa gần đúng giữa KDTreeKDTreeKDTree objects by ignoring all distances that exceed a user-provided value. This routine is not limited to the conventional L2 (Euclidean) norm but supports any Minkowski p-norm between 1 and infinity. By default, the returned data structure is a dictionary of keys (DOK)-based sparse matrix, which is very efficient for matrix construction. This hashing approach to sparse matrix assembly can be seven times faster than constructing with CSR format71, and the C++ level sparse matrix construction releases the Python GIL for increased performance. Once the matrix is constructed, distance value retrieval has an amortized constant time complexity72, and the DOK structure can be efficiently converted to a CSR, CSC or COO matrix to allow for speedy arithmetic operations.

Vào năm 2015, thuật toán đếm cây kép cKDTree 73 đã được cải tiến để hỗ trợ trọng số74, rất cần thiết trong nhiều ứng dụng khoa học, chẳng hạn như điện toán .

Các liên kết hợp nhất với mã được biên dịch

Mức độ thấpCó thể gọi

Kể từ SciPy phiên bản 0. 19, người dùng có thể bọc các chức năng cấp thấp trong một scipy. Đối tượng LowLevelCallable giúp giảm chi phí gọi các hàm C đã biên dịch, chẳng hạn như các hàm được tạo bằng Numba hoặc Cython, trực tiếp từ Python. Các hàm cấp thấp được hỗ trợ bao gồm các đối tượng PyCapsule , các con trỏ hàm ctypes và < . Hơn nữa, có thể tự động tạo chức năng gọi lại cấp thấp từ mô-đun Cython bằng cách sử dụng cffi function pointers. Furthermore, it is possible to generate a low-level callback function automatically from a Cython module using scipy. Mức độ thấpCó thể gọi. from_cython .

Liên kết Cython dành cho BLAS, LAPACK và đặc biệt

SciPy đã cung cấp các hàm đặc biệt và tận dụng các chương trình con đại số tuyến tính cơ bản (BLAS) và gói đại số tuyến tính (LAPACK)76 trong nhiều năm. SciPy hiện bao gồm thêm các trình bao bọc Cython40 cho nhiều quy trình BLAS và LAPACK (được thêm vào năm 2015) và các chức năng đặc biệt được cung cấp trong scipy. gói con đặc biệt (được thêm vào năm 2016), có sẵn trong scipy. linalg. cython_blas , scipy. linalg. cython_lapackscipy. đặc biệt. cython_special , tương ứng. Khi viết các thuật toán trong Cython, thông thường sẽ hiệu quả hơn nếu gọi trực tiếp vào các gói SciPy của thư viện thay vì gọi gián tiếp, sử dụng API Python của SciPy. Các giao diện cấp thấp này cho Cython cũng có thể được sử dụng bên ngoài cơ sở mã SciPy để có quyền truy cập vào các chức năng trong các thư viện được bao bọc trong khi tránh được các lệnh gọi hàm Python. Điều này có thể mang lại hiệu suất tăng một hoặc hai bậc độ lớn cho nhiều trường hợp sử dụng.

Các nhà phát triển cũng có thể sử dụng các giao diện Cython cấp thấp mà không cần liên kết với các thư viện được bao bọc77. Điều này cho phép các tiện ích mở rộng khác tránh được sự phức tạp khi tìm và sử dụng đúng thư viện. Việc tránh sự phức tạp này đặc biệt quan trọng khi đóng gói các thư viện được viết bằng Fortran. Các trình bao bọc cấp thấp này không chỉ có thể được sử dụng mà không cần trình biên dịch Fortran, chúng còn có thể được sử dụng mà không cần phải xử lý tất cả các ABI trình biên dịch Fortran khác nhau và các sơ đồ xáo trộn tên

Hầu hết các trình bao bọc Cython cấp thấp này đều được tạo tự động để hỗ trợ tính chính xác và dễ bảo trì. Trình bao bọc cho BLAS và LAPACK chủ yếu được tạo bằng cách sử dụng thông tin loại được phân tích cú pháp từ tệp nguồn BLAS và LAPACK bằng F2PY19, mặc dù một số ít quy trình sử dụng chữ ký loại viết tay thay thế. Các loại đầu vào và đầu ra của mỗi quy trình được lưu trong một tệp dữ liệu được đọc khi xây dựng và được sử dụng để tạo các tệp trình bao bọc Cython tương ứng. Các hàm bao trong scipy. đặc biệt. cython_special cũng được tạo từ tệp dữ liệu chứa thông tin loại cho các quy trình được bao bọc.

Vì SciPy có thể được xây dựng với LAPACK 3. 4. 0 trở lên, trình bao bọc Cython chỉ được cung cấp cho các quy trình duy trì giao diện nhất quán trên tất cả các phiên bản LAPACK được hỗ trợ. Giao diện BLAS tiêu chuẩn được cung cấp bởi các thư viện BLAS hiện có khác nhau hiện không thay đổi, do đó, những thay đổi thường không cần thiết trong các trình bao bọc do SciPy cung cấp. Các thay đổi đối với trình bao bọc Cython cho các chức năng trong scipy. đặc biệt theo dõi các thay đổi tương ứng đối với giao diện của gói con đó.

tối ưu hóa số

scipy . tối ưu hóa gói con cung cấp các chức năng cho giải pháp số của một số loại bài toán tìm nghiệm và tối ưu hóa. Ở đây chúng tôi nêu bật những bổ sung gần đây thông qua SciPy 1. 0.

tối ưu hóa tuyến tính

Trình tối ưu hóa điểm trong mới cho các bài toán lập trình tuyến tính liên tục, linprog với method = 'interior . 0. Triển khai thuật toán cốt lõi của bộ giải thương mại MOSEK78, nó giải quyết tất cả hơn 90 bài toán điểm chuẩn NETLIB LP79 đã được thử nghiệm. Không giống như một số phương pháp điểm bên trong, công thức tự đối ngẫu đồng nhất này cung cấp các chứng chỉ về tính khả thi hoặc không bị chặn khi thích hợp. , was released with SciPy 1.0. Implementing the core algorithm of the commercial solver MOSEK78, it solves all of the 90+ NETLIB LP benchmark problems79 tested. Unlike some interior point methods, this homogeneous self-dual formulation provides certificates of infeasibility or unboundedness as appropriate.

Một thủ tục giải quyết trước80 giải các bài toán tầm thường và mặt khác thực hiện đơn giản hóa vấn đề, chẳng hạn như thắt chặt giới hạn và loại bỏ các biến cố định, và một trong số các thủ tục để loại bỏ các ràng buộc đẳng thức dư thừa được chọn tự động để giảm khả năng gặp khó khăn về số do các ma trận đơn lẻ gây ra. Mặc dù triển khai bộ giải chính là Python thuần túy, hỗ trợ ma trận thưa thớt từ đầu đến cuối và sử dụng nhiều bộ giải hệ thống tuyến tính đã biên dịch của SciPy—thường cho cùng một hệ thống có nhiều vế phải do phương pháp dự đoán-chỉnh sửa—cung cấp đủ tốc độ cho các bài toán

tối ưu hóa phi tuyến. giảm thiểu cục bộ

Chức năng tối thiểu hóa cung cấp một giao diện thống nhất để tìm cực tiểu cục bộ của các bài toán tối ưu hóa phi tuyến tính. Bốn phương pháp mới để tối ưu hóa không giới hạn đã được thêm vào thu nhỏ trong các phiên bản gần đây của SciPy. dogleg , trust-ncg , trust-exact and trust-krylov. All are trust-region methods that build a local model of the objective function based on first and second derivative information, approximate the best point within a local ‘trust region’ and iterate until a local minimum of the original objective function is reached, but each has unique characteristics that make it appropriate for certain types of problems. For instance, tin cậy-chính xác đạt được sự hội tụ nhanh bằng cách giải bài toán con vùng tin cậy gần như chính xác, nhưng nó yêu cầu phải lưu trữ và phân tích ma trận Hessian đạo hàm thứ hai . Ngược lại, trust-ncgtrust-krylov rất phù hợp với . Chúng tôi so sánh chi tiết các đặc điểm của tất cả các phương pháp giảm thiểu trong Bảng 1, bảng này minh họa mức độ hoàn thiện mà SciPy hướng tới khi đề cập đến một phương pháp hoặc chủ đề số.

Bảng 1 Các phương pháp tối ưu hóa từ giảm thiểu

Bảng kích thước đầy đủ

tối ưu hóa phi tuyến. giảm thiểu toàn cầu

giảm thiểu có thể trả về bất kỳ mức tối thiểu cục bộ nào nên một số vấn đề yêu cầu sử dụng quy trình tối ưu hóa toàn cục. scipy mới. tối ưu hóa. differ_evolution function81,82 là trình tối ưu hóa toàn cầu ngẫu nhiên hoạt động bằng cách phát triển tập hợp các giải pháp ứng cử viên. Trong mỗi lần lặp lại, các ứng cử viên dùng thử được tạo ra bởi sự kết hợp của các ứng cử viên từ quần thể hiện có. Nếu các ứng cử viên thử nghiệm đại diện cho một sự cải tiến, thì dân số được cập nhật. Gần đây nhất, bộ điểm chuẩn SciPy đã đạt được một tập hợp toàn diện gồm 196 bài toán tối ưu hóa toàn cầu để theo dõi hiệu suất của các bộ giải hiện có theo thời gian và để đánh giá xem hiệu suất của các bộ giải mới có xứng đáng được đưa vào gói hay không.

phân phối thống kê

scipy . stats gói con chứa hơn 100 phân phối xác suất. 96 phân phối đơn biến liên tục và 13 rời rạc và 10 phân phối đa biến. Việc triển khai dựa trên một khung nhất quán cung cấp các phương pháp lấy mẫu các biến ngẫu nhiên, để đánh giá hàm phân phối tích lũy (CDF) và hàm mật độ xác suất (PDF) cũng như để điều chỉnh các tham số cho mọi phân phối. Nói chung, các phương pháp dựa trên các triển khai cụ thể cho từng phân phối, chẳng hạn như biểu thức dạng đóng của CDF hoặc thuật toán lấy mẫu, nếu có. Mặt khác, các phương pháp mặc định được sử dụng dựa trên mã chung, ví dụ: tích hợp số của PDF để lấy CDF. Các bản phân phối chính gần đây đã được thêm vào scipy. thống kê bao gồm phân phối dựa trên biểu đồ trong scipy. số liệu thống kê. rv_histogram và phân phối đa thức trong scipy. số liệu thống kê. đa thức (ví dụ: được sử dụng trong xử lý ngôn ngữ tự nhiên83).

nội suy đa thức

Trong lịch sử, SciPy chủ yếu dựa vào thư viện FITPACK Fortran đáng kính của P. Dierckx53,84 cho phép nội suy đơn biến và xấp xỉ dữ liệu, nhưng thiết kế nguyên khối ban đầu và API để tương tác giữa SciPy và FITPACK đã hạn chế đối với cả người dùng và nhà phát triển

Việc triển khai một thiết kế mô-đun mới của các bộ nội suy đa thức đã được trải rộng trên một số bản phát hành. Mục tiêu của nỗ lực này là có một tập hợp các đối tượng cơ bản biểu diễn các đa thức từng phần, để thực hiện một tập hợp các thuật toán để xây dựng các bộ nội suy khác nhau và cung cấp cho người dùng các khối xây dựng để xây dựng các bộ nội suy bổ sung

Ở mức thấp nhất của thiết kế mới là các lớp đại diện cho đa thức từng phần đơn biến. PPoly (SciPy 0. 13)85, BPoly (SciPy 0. 13) và BSpline (SciPy 0. 19)86, cho phép đánh giá véc tơ hiệu quả, phân biệt, tích hợp và tìm gốc. PPoly đại diện cho đa thức từng phần trong cơ sở lũy thừa về điểm dừng và hệ số tại mỗi khoảng. BPoly tương tự và biểu diễn các đa thức từng phần trong cơ sở Bernstein (ví dụ, phù hợp để xây dựng các đường cong Bézier). BSpline biểu thị các đường cong spline, tức là các tổ hợp tuyến tính của các phần tử cơ sở B-spline87.

Trong lớp tiếp theo, các lớp đa thức này được sử dụng để xây dựng một số cách nội suy dữ liệu phổ biến. CubicSpline (SciPy 0. 18)88 xây dựng một hàm lập phương bậc ba khả vi hai lần, Akima1DInterpolatorPCHIPInterpolator .

Bộ kiểm tra và điểm chuẩn

bộ thử nghiệm

Phát triển dựa trên thử nghiệm đã được mô tả như một cách để quản lý nỗi sợ hãi và sự không chắc chắn khi thực hiện thay đổi mã91. Đối với mỗi thành phần của SciPy, chúng tôi viết nhiều bài kiểm tra thực thi nhỏ để xác minh hành vi dự định của nó. Bộ sưu tập những thứ này, được gọi là 'bộ thử nghiệm', làm tăng độ tin cậy về tính đúng đắn và chính xác của thư viện, đồng thời cho phép chúng tôi thực hiện các sửa đổi mã được biết là không làm thay đổi hành vi mong muốn. Theo thông lệ tích hợp liên tục92, tất cả các đóng góp được đề xuất cho SciPy tạm thời được tích hợp với nhánh chính của thư viện trước khi bộ kiểm tra được chạy và tất cả các kiểm tra phải được thông qua trước khi đóng góp được hợp nhất vĩnh viễn. Liên tục theo dõi số lượng dòng mã trong SciPy được bao phủ bởi các bài kiểm tra đơn vị là một cách chúng tôi duy trì sự chắc chắn rằng các thay đổi và tính năng mới được triển khai chính xác

Bộ thử nghiệm SciPy được sắp xếp theo một ma trận tích hợp liên tục bao gồm các nền tảng POSIX và Windows (32/64-bit) do Travis CI và AppVeyor quản lý, tương ứng. Các thử nghiệm của chúng tôi bao gồm Python phiên bản 2. 7, 3. 4, 3. 5, 3. 6 và bao gồm linting mã với pyflakespycodestyle . Có hơn 13.000 bài kiểm tra đơn vị trong bộ bài kiểm tra, được viết để sử dụng với pytest (https. // tài liệu. người khó tính. org/vi/mới nhất). Trong bộ lễ phục. 2, chúng tôi hiển thị dữ liệu phạm vi thử nghiệm lịch sử được tạo bằng cách sử dụng phương pháp dựa trên Docker (https. //github. com/tylerjereddy/scipy-cov-track). Ngoại trừ việc loại bỏ 61.000 dòng mã đã biên dịch cho SciPy v0. Kể từ ngày 14 tháng 10, khối lượng của cả mã được biên dịch (C, C++ và Fortran) và mã Python đã tăng lên giữa các lần phát hành, cũng như số lượng dòng được bao phủ bởi các bài kiểm tra đơn vị. Kiểm tra phạm vi bảo hiểm tại SciPy 1. 0 là 87% đối với mã Python theo pytest-cov (https. //pypi. org/dự án/pytest-cov/). Mức độ phù hợp của mã được biên dịch (C, C++ và Fortran) chỉ là 45% theo gcov (https. // gcc. gnu. org/onlinedocs/gcc/Gcov. html), nhưng cơ sở mã được biên dịch mạnh mẽ hơn nhiều so với con số này gợi ý vì con số này không chính xác khi bao gồm mã của nhà cung cấp có uy tín, thư viện ban đầu đã được kiểm tra kỹ lưỡng; . Tài liệu về mã được dịch vụ CircleCI tự động xây dựng và xuất bản để tạo điều kiện đánh giá các thay đổi/tính toàn vẹn của tài liệu.

Quả sung. 2

Tính toán khoa học với các dự án python

Khối lượng mã Python và được biên dịch trong SciPy theo thời gian

Hình ảnh kích thước đầy đủ

bộ điểm chuẩn

Ngoài việc đảm bảo vượt qua các bài kiểm tra đơn vị, điều quan trọng là phải xác nhận rằng hiệu suất của cơ sở mã SciPy được cải thiện theo thời gian. Kể từ tháng 2 năm 2015, hiệu suất của SciPy đã được theo dõi bằng Tốc độ bay ( asv https. //github. com/airspeed-velocity/asv). chạy của SciPy. Tập lệnh py kết hợp thuận tiện các tính năng của asv sao cho có thể tạo kết quả điểm chuẩn theo thời gian bằng một lệnh console. Ví dụ, trong hình. 3, chúng tôi minh họa sự cải tiến của scipy. không gian. cKDTree. truy vấn trong khoảng 9 năm lịch sử dự án. Cây được sử dụng trong điểm chuẩn được tạo mà không áp dụng cấu trúc liên kết hình xuyến ( boxsize = Không ) và các thử nghiệm được thực hiện bởi Airspeed Velocity 0. 4 sử dụng Python 2. 7, NumPy 1. 8. 2 và Cython phiên bản 0. 27. 3, 0. 21. 1 và 0. 18 (để cải thiện khả năng tương thích ngược). Những cải tiến đáng kể về hiệu suất đã được thực hiện khi cKDTree được Cython hóa hoàn toàn và một lần nữa khi nó được viết lại bằng C++.

Hình. 3. Kết quả của scipy. không gian. cKDTree. truy vấn điểm chuẩn từ khi giới thiệu cKDTree cho đến khi phát hành SciPy 1. 0.

Tính toán khoa học với các dự án python

Điểm chuẩn tạo ra một cây kd từ các điểm được phân phối đồng đều trong một siêu khối đơn vị m chiều, sau đó tìm hàng xóm (Euclidean) gần nhất trong cây cho mỗi 1.000 điểm truy vấn. Mỗi điểm đánh dấu trong hình biểu thị thời gian thực hiện điểm chuẩn cho một cam kết trong nhánh chính của SciPy

Hình ảnh kích thước đầy đủ

Tổ chức dự án và cộng đồng

quản trị

SciPy đã thông qua một tài liệu quản trị chính thức (https. // tài liệu. scipy. org/doc/scipy/tham chiếu/dev/quản trị/quản trị. html) vào ngày 3 tháng 8 năm 2017. Một hội đồng chỉ đạo, hiện gồm 18 thành viên, giám sát sự phát triển hàng ngày của dự án bằng cách đóng góp mã và xem xét các đóng góp từ cộng đồng. Các thành viên hội đồng có quyền cam kết đối với kho lưu trữ dự án, nhưng họ phải hợp nhất các thay đổi chỉ khi không có sự phản đối thực sự nào của cộng đồng. Chủ tịch hội đồng chỉ đạo, Ralf Gommers, chịu trách nhiệm bắt đầu đánh giá kỹ thuật hai năm một lần về hướng dự án và tóm tắt mọi hoạt động của hội đồng tư nhân cho cộng đồng rộng lớn hơn. Nhà độc tài nhân từ suốt đời của dự án, Pauli Virtanen, có thẩm quyền vượt trội về mọi vấn đề, nhưng phải hành động một cách thiện chí và chỉ thực hiện thẩm quyền này khi hội đồng chỉ đạo không thể đạt được thỏa thuận

Quy tắc ứng xử chính thức của SciPy đã được phê duyệt vào ngày 24 tháng 10 năm 2017. Tóm lại, có năm hướng dẫn cụ thể. cởi mở với tất cả mọi người tham gia vào cộng đồng của chúng tôi; . Bộ quy tắc ứng xử chỉ rõ cách thức các hành vi vi phạm có thể được báo cáo cho ủy ban quy tắc ứng xử và phác thảo các quy trình phản hồi của ủy ban. Tuyên bố đa dạng của chúng tôi “chào đón và khuyến khích sự tham gia của mọi người. ”

Người bảo trì và người đóng góp

Dự án SciPy có ~100 người đóng góp duy nhất cho mỗi chu kỳ phát hành 6 tháng. Bất kỳ ai quan tâm và có kỹ năng đều có thể trở thành cộng tác viên; . //scipy. github. io/devdocs/dev/contributor/contributor_toc. html) cung cấp hướng dẫn về cách thực hiện điều đó. Ngoài ra, dự án hiện có 15 nhân viên bảo trì tích cực (tình nguyện viên). những người xem xét sự đóng góp của người khác và làm mọi thứ khác cần thiết để đảm bảo rằng phần mềm và dự án tiến lên phía trước. Những người bảo trì rất quan trọng đối với sức khỏe của dự án93; . Bất kỳ ai cũng có thể trở thành người bảo trì vì họ được chọn trên cơ sở luân phiên từ những người đóng góp có lịch sử đóng góp đáng kể với chất lượng cao

Kinh phí

Chi phí phát triển của SciPy được Open Hub ước tính vượt quá 10 triệu đô la (https. //www. openhub. net/p/scipy/estimated_cost). Tuy nhiên, dự án phần lớn không được tài trợ, được phát triển chủ yếu bởi các sinh viên tốt nghiệp, giảng viên và các thành viên trong ngành trong thời gian rảnh rỗi của họ. Một lượng nhỏ tài trợ đã được áp dụng thành công. một số cuộc họp được tài trợ bởi các trường đại học và ngành công nghiệp, cơ sở hạ tầng và thuật toán được hỗ trợ trong chương trình Summer of Code của Google và quỹ tài trợ giảng dạy đã được sử dụng sớm để phát triển tài liệu. Tuy nhiên, tài trợ từ các cơ quan quốc gia, tổ chức và ngành công nghiệp không tương xứng với khối lượng lớn phần mềm quan trọng dựa trên SciPy. Chi tiêu đa dạng hơn để hỗ trợ lập kế hoạch, phát triển, quản lý và cơ sở hạ tầng sẽ giúp SciPy duy trì nền tảng lành mạnh cho các nỗ lực khoa học và công nghiệp quốc tế

dự án hạ lưu

Hệ sinh thái Python khoa học bao gồm nhiều ví dụ về thư viện phần mềm dành riêng cho miền được xây dựng dựa trên các tính năng của SciPy và sau đó quay lại thư viện SciPy cơ sở để đề xuất và thậm chí triển khai các cải tiến. Ví dụ: có những người đóng góp chung cho thư viện lõi SciPy và Astropy94 và những gì hoạt động tốt cho một trong các cơ sở mã, cơ sở hạ tầng hoặc cộng đồng thường được chuyển dưới dạng này sang dạng khác. Ở cấp độ cơ sở mã, chức năng binned_statistic là một trong những đóng góp liên dự án như vậy. ban đầu nó được phát triển trong gói liên kết với Astropy và sau đó được đặt trong SciPy. Theo quan điểm này, SciPy đóng vai trò là chất xúc tác cho sự thụ tinh chéo trong cộng đồng máy tính khoa học Python.

Thảo luận

SciPy có cộng đồng nhà phát triển mạnh mẽ và cơ sở người dùng khổng lồ. Số liệu lưu lượng truy cập GitHub báo cáo khoảng 20.000 khách truy cập duy nhất vào trang web nguồn trong khoảng thời gian từ ngày 14 tháng 5 năm 2018 đến ngày 27 tháng 5 năm 2018 (gần thời điểm viết bài), với 721 bản sao duy nhất ('bản sao') của cơ sở mã trong khoảng thời gian đó. Cộng đồng nhà phát triển tại thời điểm đó bao gồm 610 người đóng góp mã nguồn duy nhất, với hơn 19.000 cam kết được chấp nhận vào cơ sở mã (dữ liệu trang GitHub)

Từ phía người dùng, đã có 13.096.468 lượt tải xuống SciPy từ Chỉ số đóng gói Python (PyPI)95 và 5.776.017 thông qua kênh mặc định của conda (https://github.com/ContinuumIO/anaconda-package-data) package manager during the year 2017. These numbers establish a lower bound on the total number of downloads by users given that PyPI and conda chỉ là hai trong số một số phương pháp phổ biến để cài đặt SciPy. Trang web SciPy (http. //www. scipy. org/), đã được trích dẫn mặc định khi không có bài báo được bình duyệt, đã được trích dẫn hơn 3.000 lần (https. // học giả. Google. com/scholar?cites=2086009121748039507). Một số cách sử dụng hoặc minh chứng nổi bật nhất về độ tin cậy của SciPy bao gồm sự hợp tác khoa học LIGO-Virgo dẫn đến việc quan sát sóng hấp dẫn96, thực tế là SciPy được vận chuyển trực tiếp cùng với macOS và trong bản phân phối của Intel dành cho Python97, và SciPy là . //github. blog/2019-01-24-the-state-of-the-octoverse-machine-learning/).

Tuy nhiên, SciPy liên tục cố gắng cải thiện. Lộ trình SciPy (https. // tài liệu. scipy. org/doc/scipy-1. 0. 0/tham chiếu/lộ trình. html, https. //scipy. github. io/devdocs/lộ trình. html), được tóm tắt trong Bảng 2, là một tài liệu được cập nhật liên tục do cộng đồng duy trì, mô tả một số hướng chính để cải thiện dự án, cũng như các hạn chế và vấn đề cụ thể cần hỗ trợ trong tương lai. Ngoài các mục trong lộ trình, chúng tôi vẫn đang làm việc để tăng số lượng hướng dẫn sử dụng SciPy ngoài 15 phần hiện tại của chúng tôi. Ngoài ra, mã Cython cấp thấp trong thư viện của chúng tôi (tương tác với mã cấp C và hiển thị nó để sử dụng Python) có thể sử dụng một số biện pháp hiện đại hóa, bao gồm di chuyển sang các lần xem bộ nhớ đã nhập để xử lý các mảng NumPy

Bảng 2 Tóm tắt các hạng mục trong Lộ trình SciPy sau 1. 0 phát hành

Bảng kích thước đầy đủ

Một vấn đề mà nhiều dự án nguồn mở gặp phải là thu hút và giữ chân các nhà phát triển. Mặc dù việc một số cá nhân đóng góp cho dự án một thời gian rồi tiếp tục là điều bình thường, nhưng quá nhiều doanh thu có thể dẫn đến việc mất bộ nhớ của tổ chức, dẫn đến lỗi trong quá khứ được lặp lại, API của mã mới trở nên không phù hợp với mã cũ. . Chúng tôi may mắn là dự án SciPy tiếp tục thu hút các nhà phát triển mới nhiệt tình và có năng lực trong khi vẫn duy trì sự tham gia của một người bảo vệ cũ nhỏ nhưng tận tâm. Có những người đóng góp đã có mặt trong những năm đầu của dự án vẫn đóng góp vào các cuộc thảo luận về báo cáo lỗi và đánh giá các đóng góp mã mới. Nhà độc tài nhân từ suốt đời của chúng tôi đã tham gia dự án hơn 10 năm và vẫn đang tích cực đóng góp mã, và người đứng đầu hội đồng chỉ đạo của chúng tôi, người cũng đóng vai trò là tổng giám đốc, sắp đến ngày kỷ niệm 11 năm của ông. Thêm nửa tá nhà phát triển tích cực đã đóng góp đều đặn trong năm năm trở lên. Sự kết hợp của một người bảo vệ cũ tận tụy và một loạt những người đóng góp mới đảm bảo rằng SciPy sẽ tiếp tục phát triển trong khi vẫn duy trì chất lượng cao

Một thách thức quan trọng cuối cùng cần giải quyết là khả năng cung cấp GPU và điện toán phân tán mà không làm gián đoạn cơ sở hạ tầng thuật toán/API thông thường và được sử dụng nhiều của chúng tôi. Mặc dù cách tiếp cận chính xác mà chúng tôi sẽ áp dụng trên toàn bộ thư viện để tận dụng các công nghệ mới nổi này vẫn chưa rõ ràng và không phải là ưu tiên tại 1. 0, chúng tôi hiện có triển khai cụ thể gói phụ cho phép sử dụng thử nghiệm nhiều chương trình phụ trợ, chẳng hạn như cấu trúc dữ liệu có thể điều khiển bằng GPU, trong scipy mới. fft . Điều này sẽ được mô tả chi tiết trong một báo cáo trong tương lai.

Tóm tắt báo cáo

Thông tin thêm về thiết kế nghiên cứu có sẵn trong Tóm tắt báo cáo nghiên cứu tự nhiên được liên kết với bài viết này

Dữ liệu sẵn có

Dữ liệu thô cho hình. 2 có sẵn tại https. //github. com/tylerjereddy/scipy-cov-track và dữ liệu thô cho Hình. 3 có sẵn tại https. //github. com/scipy/scipy-articles/tree/master/scipy-1. 0/supporting_info/asv_bench/cKDTree

mã sẵn có

Tất cả mã nguồn thư viện SciPy đều có sẵn trong kho lưu trữ SciPy GitHub, https. //github. com/scipy/scipy

Thay đổi lịch sử

  • 24 Tháng hai 2020

    Bản sửa lỗi cho bài báo này đã được xuất bản. https. //doi. tổ chức/10. 1038/s41592-020-0772-5

Người giới thiệu

  1. Oliphant, T. E. Hướng dẫn về NumPy lần đầu xuất bản (Trelgol Publishing USA, 2006)

  2. van derWalt, S. , Colbert, S. C. & Varoquaux, G. Mảng NumPy. một cấu trúc để tính toán số hiệu quả. máy tính. Khoa học. Anh. 13, 22–30 (2011)

    Google học giả

  3. Pedregosa, F. et al. Scikit-học. máy học trong Python. J. máy móc. Học. độ phân giải. 12, 2825–2830 (2011)

    Google học giả

  4. van derWalt, S. et al. hình ảnh scikit. xử lý ảnh trong Python. ngang hàng. 2, e453 (2014)

    PubMed  PubMed Central  Google Scholar

  5. Nitz, A. et al. gwastro/pycbc. PyCBC v1. 13. 2 phát hành, https. //doi. tổ chức/10. 5281/zenodo. 1596771 (27/11/2018)

  6. Vallisneri, M. , Kanner, J. , Williams, R. , Weinstein, A. & Stephens, B. Trung tâm Khoa học Mở LIGO. J. vật lý. tâm sự. người phục vụ. 610, 012021 (2015)

    Google học giả

  7. Abbott, B. P. et al. GW150914. Kết quả đầu tiên từ việc tìm kiếm sự hợp nhất của lỗ đen nhị phân với Advanced LIGO. vật lý. Tái bản. Đ. 93, 122003 (2016)

    PubMed  PubMed Central  Google Scholar

  8. Abbott, B. P. et al. GW170817. quan sát sóng hấp dẫn từ sao đôi neutron truyền cảm hứng. vật lý. Tái bản. thư. 119, 161101 (2017)

    CAS  PubMed  Google Scholar

  9. Hợp tác Kính viễn vọng Chân trời Sự kiện. et al. Kết quả kính viễn vọng chân trời sự kiện M87 đầu tiên. III. Xử lý dữ liệu và hiệu chuẩn. thiên văn. J. thư. 875, L3 (2019)

    Google học giả

  10. Blanton, K. Tại Mathworks, hỗ trợ + vui vẻ = thành công. CEO Jack Little tin tưởng vào sức mạnh của nhân viên – và ý tưởng của họ. Quả cầu Boston, J5 (20 tháng 4 năm 1997)

  11. Howell, Đ. Bản đồ kỹ thuật số của Jack Dangermond đưa ra tất cả. Nhật báo kinh doanh của nhà đầu tư (14 tháng 8 năm 2009)

  12. Cảng, O. giải pháp đơn giản. BusinessWeek, 24–24 (3 tháng 10 năm 2005)

  13. van Rossum, G. Hướng dẫn tham khảo API Python/C, http. //citeseerx. ist. psu. edu/viewdoc/download?doi=10. 1. 1. 211. 6702&rep=rep1&type=pdf (2001)

  14. Hugunin, J. Đề xuất đối tượng ma trận (rất dài), https. //thư. con trăn. org/pipermail/matrix-sig/1995-August/000002. html (18 tháng 8 năm 1995)

  15. Hugunin, J. Mở rộng Python để tính toán số, http. //hugunin. net/giấy tờ/hugunin95numpy. Html (1995)

  16. Oliphant, T. e. Tiến lên từ thập kỷ trước của SciPy. Slide thuyết trình, https. //hội nghị. scipy. org/scipy2010/slides/travis_oliphant_keynote. pdf (1 tháng 7 năm 2010)

  17. Oliphant, T. e. Một số mô-đun Python. Lưu trữ web, https. // trang web. lưu trữ. org/web/19990125091242/http. // chất béo. netpedia. mạng lưới. 80/ (25-01-1999)

  18. Oliphant, T. e. Các mô-đun để nâng cao Numerical Python. Lưu trữ web, https. // trang web. lưu trữ. org/web/20001206213500/http. // chất béo. netpedia. mạng lưới. 80/ (6 tháng 12 năm 2000)

  19. Peterson, P. F2PY. một công cụ để kết nối các chương trình Fortran và Python. số nguyên. J. máy tính. Khoa học. Anh. 4, 296–305 (2009)

    Google học giả

  20. Người lạ, G. mô-đun Python. Lưu trữ web, https. // trang web. lưu trữ. org/web/20001022231108/http. //www. bước sóng. mgh. harvard. edu/Neural_Systems_Group/gary/python. Html (2000)

  21. Nhà phát triển SciPy. khoa học viễn tưởng. tổ chức. Lưu trữ web, https. // trang web. lưu trữ. org/web/20010309040805/http. //scipy. tổ chức. 80/ (2001)

  22. Vaught, T. N. Danh sách gửi thư của Nhà phát triển SciPy hiện đang trực tuyến, https. //thư. con trăn. org/pipermail/scipy-dev/2001-tháng 6/000000. Html (2001)

  23. Jones, E. ANN. khoa học 0. 10–máy tính khoa học với Python, https. //thư. con trăn. org/pipermail/python-list/2001-tháng 8/106419. Html (2001)

  24. Vaught, T. N. Tài liệu tham khảo và tài liệu Hướng dẫn hiện có sẵn để tải xuống dưới dạng tarball. Lưu trữ webhttps. // trang web. lưu trữ. org/web/20021013204556/http. //www. scipy. tổ chức. 80/scipy/site_content/site_news/docs_released1 (2002)

  25. Vaught, T. N. [ANN] SciPy ‘02 - Python cho Hội thảo Điện toán Khoa học, https. //thư. con trăn. org/pipermail/numpy-discussion/2002-tháng 6/001511. Html (2002)

  26. Ascher, Đ. , Dubois, P. F. , Hinsen, K. , Hugunin, J. & Oliphant, T. e. Một dự án mã nguồn mở. Python số, https. //doi. tổ chức/10. 5281/zenodo. 3599566 (2001)

  27. Greenfield, P. Làm thế nào Python trườn vào thiên văn học. Trình bày, https. //hội nghị. scipy. org/scipy2011/slides/greenfield_keynote_astronomy. pdf (2011)

  28. Greenfield, P. , Miller, J. T. , Từ, J. T. & Trắng. L. chữ số. một gói mảng khoa học mới cho Python. PyCon DC (2003)

  29. Nhà phát triển NumPy. v1. 0, https. //github. com/numpy/numpy/phát hành/thẻ/v1. 0 (25 tháng 10 năm 2006)

  30. Millman, K. J. & Pérez, F. Phát triển thực hành khoa học mã nguồn mở. trong Triển khai Nghiên cứu Tái sản xuất (CRC Press) 149–183 (2014)

  31. Brandl, G. & đội Nhân sư. Nhân sư - Trình tạo tài liệu Python, http. //www. nhân sư-doc. org/en/master/ (2007)

  32. Virtanen, P. et al. pydocweb. một công cụ để cộng tác ghi lại các mô-đun Python qua web. Lưu trữ web, https. //mã số. Google. com/archive/p/pydocweb/ (2008)

  33. Harrington, J. Dự án tài liệu SciPy. Trong Kỷ yếu của Hội nghị Khoa học Python lần thứ 7 (eds G. Varoquaux, G. , Vaught, T. & Millman, K. J. ) 33–35 (2008)

  34. van der Walt, S. Dự án tài liệu SciPy (tổng quan kỹ thuật). Trong Kỷ yếu của Hội nghị Khoa học Python lần thứ 7 (eds G. Varoquaux, G. , Vaught, T. & Millman, K. J. ) 27–28 (2008)

  35. Harrington, J. & Thợ kim hoàn, D. Báo cáo tiến trình. Tài liệu NumPy và SciPy năm 2009. Trong Kỷ yếu của Hội nghị Khoa học Python lần thứ 8 (eds Varoquaux, G. , van der Walt, S. & Millman, K. J. ) 84–87 (2009)

  36. Pérez, F. , Langtangen, H. P. & LeVeque, R. Python cho máy tính khoa học. Trong Hội nghị SIAM về Khoa học và Kỹ thuật Tính toán, 42(5) (2009)

  37. Dubois, P. F. con trăn. bao gồm pin. máy tính. Khoa học. Anh. 9, 7–9 (2007)

    Google học giả

  38. Millman, K. J. & Aivazis, M. Python cho các nhà khoa học và kỹ sư. máy tính. Khoa học. Anh. 13, 9–12 (2011)

    Google học giả

  39. Pérez, F. , Granger, B. e. & Thợ săn, J. Đ. con trăn. một hệ sinh thái cho máy tính khoa học. máy tính. Khoa học. Anh. 13, 13–21 (2011)

    Google học giả

  40. Behnel, S. et al. Cython. tốt nhất của cả hai thế giới. máy tính. Khoa học. Anh. 13, 31–39 (2011)

    Google học giả

  41. Ramachandran, P. & Varoquaux, G. mayavi. Trực quan hóa 3D dữ liệu khoa học. máy tính. Khoa học. Anh. 13, 40–51 (2011)

    Google học giả

  42. Muller, E. et al. Python trong khoa học thần kinh. Đổi diện. thông tin thần kinh. 9, 11 (2015)

    PubMed  PubMed Central  Google Scholar

  43. GitHub. Mạng phụ thuộc - scipy/scipy, https. //github. com/scipy/scipy/mạng/người phụ thuộc (2019)

  44. Boisvert, R. F. , Howe, S. e. & Kahaner, D. K. Hướng dẫn về hệ thống phân loại bài toán phần mềm toán học có sẵn. cộng đồng. thống kê. mô phỏng. Máy tính 20, 811–842 (1991)

    Google học giả

  45. Seabold, S. & Perktold, J. mô hình thống kê. mô hình kinh tế lượng và thống kê với Python. Trong Kỷ yếu Hội nghị Khoa học Python lần thứ 9 57–61 (2010)

  46. Salvatier, J. , Wiecki, T. V. & Fonnesbeck, C. Lập trình xác suất trong Python sử dụng PyMC3. máy tính ngang hàng. Khoa học. 2, e55 (2016)

    Google học giả

  47. Quản đốc-Mackey, D. , Hogg, D. W. , Lang, D. & Người tốt, J. người dẫn chương trình. búa MCMC. Xuất bản. thiên văn. Sóc. pác. 125, 306–312 (2013)

    Google học giả

  48. Meurer, A. et al. SymPy. điện toán tượng trưng trong Python. máy tính ngang hàng. Khoa học. 3, e103 (2017)

    Google học giả

  49. Hagberg, A. Một. , Schult, D. Một. & Swart, P. J. Khám phá cấu trúc mạng, động lực và chức năng bằng NetworkX. Trong Kỷ yếu Hội nghị khoa học Python lần thứ 7. (eds G. Varoquaux, G. , Vaught, T. & Millman, K. J. ) 11–15 (2008)

  50. Koelbel, C. H. & Zosel, M. E. Cẩm nang FORTRAN hiệu suất cao (Nhà xuất bản MIT, 1993)

  51. Piessen, R. , de Doncker-Kapenga, E. , Uberhuber, C. W. & Kahaner, D. K. QUADACK. Gói chương trình con để tích hợp tự động (Springer, 1983)

  52. Hindmarsh, A. C. ODEPACK, một bộ sưu tập các bộ giải ODE được hệ thống hóa. Máy tính khoa học 55–64 (1983)

  53. Dierckx, P. Lắp đường cong và bề mặt với Splines (Oxford Univ. báo chí, 1993)

  54. Boggs, P. T. , Byrd, R. H. , Rogers, J. E. & Schnabel, R. B. Hướng dẫn tham khảo của người dùng cho ODRPACK Phiên bản 2. 01. Phần mềm hồi quy khoảng cách trực giao trọng lượng (U. S. Bộ Thương mại, Viện Tiêu chuẩn và Công nghệ Quốc gia, 1992)

  55. Hơn. Jorge J. , Garbow, B. S. & Hillstrom, K. e. Hướng dẫn sử dụng MINPACK-1. Báo cáo ANL-80–74 (Phòng thí nghiệm quốc gia Argonne, 1980)

  56. Swarztrauber, P. N. Vector hóa các FFT. Trong tính toán song song (ed. Rodrigue, G. ) 51–83 (Học thuật, 1982)

  57. Swarztrauber, P. N. Thuật toán FFT cho máy tính véc tơ. Máy tính song song. 1, 45–63 (1984)

    Google học giả

  58. Lehoucq, R. B. , Sorensen, D. C. & Dương, C. Hướng dẫn sử dụng ARPACK. giải pháp cho các vấn đề về giá trị bản địa quy mô lớn với các phương pháp Arnoldi được khởi động lại hoàn toàn. (Đại học Lúa gạo, 1997)

  59. A-mốt, Đ. e. thuật toán 644. Một gói di động cho các hàm Bessel của một đối số phức tạp và thứ tự không âm. ACM xuyên. môn Toán. Phần mềm. 12, 265–273 (1986)

    Google học giả

  60. Nâu, B. , Lovato, J. & Russel, K. CDFLIB, https. //Mọi người. sc. fsu. edu/~jburkardt/f_src/cdflib/cdflib. html (truy cập ngày 6 tháng 7 năm 2018)

  61. Kernighan, B. W. & Ritchie, D. m. Ngôn ngữ lập trình C tái bản lần 2 (Tài liệu tham khảo kỹ thuật chuyên nghiệp của Prentice Hall, 1988)

  62. Người cho vay, F. , Kirches, C. & Potschka, A. trlib. triển khai phương pháp GLTR không có véc tơ cho giải pháp lặp lại cho vấn đề vùng tin cậy. tối ưu. Phần mềm phương pháp. 33, 420–449 (2018)

    Google học giả

  63. Lý, X. S. et al. Hướng dẫn sử dụng SuperLU. Báo cáo LBNL-44289 (Phòng thí nghiệm quốc gia Lawrence Berkeley, 1999)

  64. Lý, X. S. Tổng quan về SuperLU. thuật toán, triển khai và giao diện người dùng. ACM xuyên. môn Toán. Phần mềm. 31, 302–325 (2005)

    Google học giả

  65. Thợ cắt tóc, C. b. , Dobkin, D. P. & Huhdanpaa, H. Thuật toán Quickhull cho vỏ lồi. ACM xuyên. môn Toán. Phần mềm. 22, 469–483 (1996)

    Google học giả

  66. Lâm, S. K. , Pitrou, A. & Seibert, S. tê liệt. Trình biên dịch JIT Python dựa trên LLVM. Trong Kỷ yếu Hội thảo lần thứ hai về Cơ sở hạ tầng trình biên dịch LLVM trong HPC 7. 1–7. 6 (ACM, 2015)

  67. Bolz, C. F. , Cuni, A. , Fijalkowski, M. & Rigo, A. Theo dõi cấp độ meta. Trình biên dịch JIT theo dõi của PyPy. Trong Kỷ yếu Hội thảo lần thứ 4 về Triển khai, Biên dịch, Tối ưu hóa Ngôn ngữ Hướng đối tượng và Hệ thống Lập trình 18–25 (ACM, 2009)

  68. VanderPlas, J. Đo điểm chuẩn các tìm kiếm hàng xóm gần nhất bằng Python, https. //jakevdp. github. io/blog/2013/04/29/benchmarking-nearest-neighbor-searches-in-python/ (19 tháng 4 năm 2013)

  69. Maneewongvatana, S. & Núi, D. m. Phân tích tìm kiếm hàng xóm gần nhất với các tập hợp điểm được phân cụm. In trước tại https. //arxiv. org/pdf/cs/9901013. pdf (1999)

  70. Khuôn mẫu, S. ENH. Cải tiến về không gian. cKDTree, https. //github. com/scipy/scipy/pull/4374/ (ngày 7 tháng 1 năm 2015)

  71. Aspnas, M. , Signell, A. & Westerholm, J. Lắp ráp hiệu quả các ma trận thưa thớt bằng cách sử dụng hàm băm. Trong tính toán song song ứng dụng. Nhà nước của nghệ thuật trong máy tính khoa học (eds Kagstrom, B. et al. ) 900–907 (Springer, 2007)

  72. Cormen, T. h. , Stein, C. , Rivest, R. l. & Leiserson, C. e. Introduction to Algorithms tái bản lần 2 (McGraw-Hill Higher Education, 2001)

  73. Moore A. W. et al. Thuật toán nhanh và thống kê hiệu quả. Hàm tương quan điểm N. Khai thác bầu trời. ESO Astrophysics Symposia (Đài thiên văn Nam châu Âu) (eds Banday, A. J. , Zaroubi, S. & Bartelmann, M. ) 71–82 (Springer, 2001)

  74. Feng, Y. ENH. Count_neighour nhanh hơn trong cKDTree / + dữ liệu đầu vào có trọng số https. //github. com/scipy/scipy/pull/5647 (2015)

  75. Martin, A. m. , Giovanelli, R. , Haynes, M. P. & Guzzo, L. Các đặc điểm phân cụm của các thiên hà được HI chọn lọc từ cuộc khảo sát 40% ALFALFA. thiên văn. J. 750, 38 (2012)

    Google học giả

  76. Anderson, E. et al. Hướng dẫn sử dụng LAPACK tái bản lần thứ 3 (Hiệp hội Toán học Công nghiệp và Ứng dụng, 1999)

  77. Henriksen, tôi. Phá vỡ trình liên kết. sử dụng BLAS và LAPACK của SciPy trong Cython. Trong Kỷ yếu của Hội nghị Khoa học Python lần thứ 14 (SciPy 2015) (eds Huff, K. & Bergstra, J. ) 49–52 (2015)

  78. Andersen, E. Đ. & Andersen, K. Đ. (2000) Trình tối ưu hóa điểm bên trong Mosek cho lập trình tuyến tính. thực hiện thuật toán thuần nhất. Trong Tối ưu hóa hiệu suất cao 197–232 (Springer, 2000)

  79. Bộ vấn đề kiểm tra NETLIB LP, http. //www. số. rl. AC. anh/dễ thương/netlib. html (2019)

  80. Andersen, E. Đ. & Andersen, K. Đ. Giải quyết trước trong quy hoạch tuyến tính. môn Toán. Chương trình. 71, 221–245 (1995)

    Google học giả

  81. Con sâu, M. , Panaccione, C. , Matney Kevin, M. & Bowen, D. K. Đặc tính cấu trúc từ dữ liệu tán xạ tia X bằng thuật toán di truyền. triết học. Dịch. r. Sóc. Luân Đôn. A 357, 2827–2848 (1999)

    CAS  Google Scholar

  82. bị chặn, R. & Giá, K. Sự phát triển khác biệt - một kinh nghiệm đơn giản và hiệu quả để tối ưu hóa toàn cầu trên các không gian liên tục. J. quả địa cầu. tối ưu. 11, 341–359 (1997)

    Google học giả

  83. Griffiths, T. l. & Steyvers, M. Tìm đề tài khoa học. Proc. Học viện Natl. Khoa học. Mỹ 101(Cung cấp. 1), 5228–5235 (2004)

    CAS  PubMed  PubMed Central  Google Scholar

  84. Dierckx, P. Lắp đường cong và bề mặt với Splines (Oxford Univ. báo chí, 1993)

  85. Virtanen, P. ENH. nội suy. viết lại đánh giá ppform trong Cython, https. //github. com/scipy/scipy/pull/2885 (2013)

  86. Burovski, E. thêm b-splines, https. //github. com/scipy/scipy/pull/3174 (27 tháng 12 năm 2013)

  87. de Boor, C. Hướng dẫn thực hành về Splines (Springer, 1978)

  88. Thị trưởng, N. ENH. Bộ nội suy CubicSpline, https. //github. com/scipy/scipy/pull/5653 (ngày 2 tháng 1 năm 2016)

  89. Fritsch, F. N. & Carlson, R. e. Nội suy bậc ba đơn điệu. SIAM J. Số. hậu môn. 17, 238–246 (1980)

    Google học giả

  90. Akima, H. Một phương pháp nội suy mới và điều chỉnh đường cong trơn tru dựa trên các thủ tục cục bộ. J. PGS. máy tính. máy móc. 17, 589–602 (1970)

    Google học giả

  91. Beck, K. Hướng phát triển thử nghiệm. Bằng ví dụ (Addison-Wesley, 2003)

  92. bạc, một. Phát triển phần mềm cộng tác dễ dàng. Thiên nhiên 550, 143–144 (2017)

    CAS  PubMed  Google Scholar

  93. Eghbal, N. Đường bộ và cầu. Lao động vô hình đằng sau cơ sở hạ tầng kỹ thuật số của chúng tôi (Ford Foundation, 2016)

  94. Hợp tác Astropy. et al. Dự án thiên văn. xây dựng một dự án khoa học mở và tình trạng của phiên bản v2. gói 0 lõi. thiên văn. J. 156, 123 (2018)

    Google học giả

  95. Lev, O. , Dufresne, J. , Kasim, R. , Skinn, B. & Wilk, J. pypinfo. xem số liệu thống kê tải xuống PyPI một cách dễ dàng, https. //github. com/ofek/pypinfo (2018)

  96. Abbott, B. P. et al. Quan sát sóng hấp dẫn từ sự hợp nhất lỗ đen nhị phân. vật lý. Tái bản. thư. 116, 061102 (2016)

    CAS  PubMed  Google Scholar

  97. David Liu. Bản phân phối của Intel dành cho Python, https. //phần mềm. tình báo. com/en-us/articles/intel-optimized-packages-for-the-intel-distribution-for-python (25 tháng 8 năm 2017, cập nhật 30 tháng 10 năm 2017, truy cập 25 tháng 7 năm 2018)

  98. Nelder, J. Một. & Mead, R. Một phương pháp đơn giản để tối thiểu hóa chức năng. máy tính. J. 7, 308–313 (1965)

    Google học giả

  99. Wright, M. h. Phương pháp tìm kiếm trực tiếp. từng bị khinh bỉ, giờ được kính trọng. Ghi chú nghiên cứu về Pitman trong sê-ri toán học 191–208 (1996)

  100. Powell, M. J. Đ. Một phương pháp hiệu quả để tìm cực tiểu của hàm nhiều biến mà không cần tính đạo hàm. máy tính. J. 7, 155–162 (1964)

    Google học giả

  101. Powell, M. J. Đ. Phương pháp tối ưu hóa tìm kiếm trực tiếp mô hình hóa các hàm mục tiêu và ràng buộc bằng phép nội suy tuyến tính. Trong Những tiến bộ trong Tối ưu hóa và Phân tích Số (eds Gomez, S. & Hennart, J. P. ) 51–67 (Springer, 1994)

  102. Powell, M. J. Đ. Các thuật toán tìm kiếm trực tiếp để tính toán tối ưu hóa. Acta Numerica 7, 287–336 (1998)

    Google học giả

  103. Powell, M. J. Đ. Một cái nhìn về các thuật toán để tối ưu hóa mà không có đạo hàm. môn Toán. Hôm nay Bull. Inst. môn Toán. ứng dụng. 43, 170–174 (2007)

    Google học giả

  104. Ba Lan, E. & Ribiere, G. Lưu ý về sự hội tụ des methodes de direction conjuguees. Tái bản. française d'informatique et. de. Rech. tùy tùng. érationnelle 3, 35–43 (1969)

    Google học giả

  105. Nocedal, J. & Wright, S. Numerical Optimization tái bản lần 2 (Springer Science & Business Media, 2006)

  106. Byrd, R. h. , Lữ , P. , Nocedal, J. & Zhu, C. Một thuật toán bộ nhớ hạn chế để tối ưu hóa bị ràng buộc ràng buộc. SIAM J. Khoa học. máy tính. 16, 1190–1208 (1995)

    Google học giả

  107. Zhu, C. , Byrd, R. h. , Lữ , P. & Nocedal, J. thuật toán 778. L-BFGS-B. Các chương trình con của Fortran để tối ưu hóa ràng buộc quy mô lớn. ACM xuyên. môn Toán. Phần mềm. 23, 550–560 (1997)

    Google học giả

  108. Schittkowski, K. Về sự hội tụ của phương pháp quy hoạch bậc hai tuần tự với chức năng tìm kiếm dòng Lagrange tăng cường. Mathematische Operationsforschung và Statistik. người phục vụ. tối ưu. 14, 197–216 (1983)

    Google học giả

  109. Schittkowski, K. Phương pháp lập trình phi tuyến của Wilson, Han và Powell với chức năng tìm kiếm dòng kiểu Lagrange tăng cường. Phần 2. một triển khai hiệu quả với các bài toán con bình phương nhỏ nhất tuyến tính. Số. môn Toán. 38, 115–127 (1982)

    Google học giả

  110. Schittkowski, K. Phương pháp lập trình phi tuyến của Wilson, Han và Powell với chức năng tìm kiếm dòng kiểu Lagrange tăng cường. Phần 1. phân tích hội tụ. Số. môn Toán. 38, 83–114 (1982)

    Google học giả

  111. giấy dán tường D. Gói phần mềm lập trình bậc hai tuần tự. Báo cáo DFVLR-FR 88–28 (Deutsche Forschungs- und Versuchsanstalt für Luft- und Raumfahrt, 1988)

  112. Nash, S. g. Tối thiểu hóa kiểu Newton thông qua phương pháp Lanczos. SIAM J. Số. hậu môn. 21, 770–788 (1984)

    Google học giả

  113. Powell, M. J. Đ. Một thuật toán mới để tối ưu hóa không giới hạn. Lập trình phi tuyến 31–65 (1970)

  114. Steihaug, T. Phương pháp gradient liên hợp và các vùng tin cậy trong tối ưu hóa quy mô lớn. SIAM J. Số. hậu môn. 20, 626–637 (1983)

    Google học giả

  115. Kết nối, A. R. , Gould, N. I. M. & Toint, P. L. Phương pháp vùng tin cậy (SIAM, 2000)

  116. More, J. J. & Sorensen, D. C. Tính toán một bước vùng tin cậy. SIAM J. Khoa học. thống kê. máy tính. 4, 553–572 (1983)

    Google học giả

  117. Gould, N. Tôi. m. , Lucidi, S. , Roma, M. & Toint, P. l. Giải bài toán con vùng tin cậy bằng phương pháp Lanczos. SIAM J. tối ưu. 9, 504–525 (1999)

    Google học giả

  118. Abbasi, H. thưa thớt. một thư viện mảng thưa thớt hiện đại hơn. Trong Kỷ yếu của Hội nghị Khoa học Python lần thứ 17 (eds Akici, F. et al. ) 27–30 (2018)

  119. Mohr, P. J. , Newel, D. b. & Taylor, B. N. CODATA khuyến nghị giá trị của các hằng số vật lý cơ bản. 2014. J. vật lý. hóa. Giới thiệu. Dữ liệu 45, 043102 (2016)

    Google học giả

  120. Boisvert, R. F. , Pozo, R. , Remington, K. , Barrett, R. F. & Dongarra, J. J. thị trường ma trận. một tài nguyên web cho các bộ sưu tập ma trận thử nghiệm. Về chất lượng của phần mềm số 125–137 (Springer, 1997)

  121. quay lại, R. & Davis, G. NetCDF. một giao diện để truy cập dữ liệu khoa học. Điện toán IEEE. đồ thị. ứng dụng. 10, 76–82 (1990)

    Google học giả

  122. Duff, tôi. S. , Grimes, R. G. & Lewis, J. G. Hướng dẫn người dùng về bộ sưu tập ma trận thưa Harwell-Boeing (bản phát hành I), http. //citeseerx. ist. psu. edu/viewdoc/tóm tắt?doi=10. 1. 1. 41. 8922 (1992)

Tải tài liệu tham khảo

Sự nhìn nhận

Chúng tôi cảm ơn tất cả những người đã đóng góp cho SciPy 1. 0, từ những người đã đăng một bình luận về một vấn đề cho đến những người đã thực hiện một số bản vá lỗi nhỏ và hơn thế nữa

thông tin tác giả

Ghi chú của tác giả

  1. Một danh sách các thành viên và chi nhánh xuất hiện ở cuối bài báo

Tác giả và Chi nhánh

  1. Đại học Jyväskylä, Jyväskylä, Phần Lan

    Pauli Virtanen

  2. Quansight LLC, Austin, TX, Hoa Kỳ

    Ralf Gommers, Travis E. Oliphant & Anthony Scopatz

  3. Hình ảnh siêu âm, Phòng khám Mayo, Rochester, MN, Hoa Kỳ

    Travis E. Oliphant

  4. Kỹ thuật Điện, Đại học Brigham Young, Provo, UT, Hoa Kỳ

    Travis E. Oliphant

  5. Ent think, Inc. , Austin, TX, Hoa Kỳ

    Travis E. Oliphant, Eric Jones & Robert Kern

  6. Anaconda Inc. , Austin, TX, Hoa Kỳ

    Travis E. Oliphant & Ian Henriksen

  7. Khoa Tài nguyên Sinh học và Kỹ thuật Nông nghiệp, Đại học Bang Bách khoa California, San Luis Obispo, CA, Hoa Kỳ

    Matt Haberland

  8. Khoa Toán, Đại học California Los Angeles, Los Angeles, CA, USA

    Matt Haberland

  9. Phòng thí nghiệm Quốc gia Los Alamos, Los Alamos, NM, Hoa Kỳ

    Tyler Reddy & C. Rừng Nathan

  10. Nhà nghiên cứu độc lập, Tokyo, Nhật Bản

    David Cournapeau

  11. Đại học Nghiên cứu Quốc gia Trường Đại học Kinh tế, Moscow, Nga

    Evgeni Burovski

  12. Nhà nghiên cứu độc lập, Saue, Estonia

    Pearu Peterson

  13. Khoa Cơ học và Toán ứng dụng, Viện Điều khiển học tại Đại học Kỹ thuật Tallinn, Tallinn, Estonia

    Pearu Peterson

  14. Viện Khoa học Dữ liệu Berkeley, Đại học California Berkeley, Berkeley, CA, Hoa Kỳ

    Warren Weckesser, Stéfan J. van der Walt & K. Jarrod Millman

  15. Nhà nghiên cứu độc lập, New York, NY, USA

    Jonathan Bright, Alex Rothberg, Johannes L. Schönberger, Stefan Peterson & Tim Leslie

  16. Trường Tâm lý học, Đại học Birmingham, Edgbaston, Birmingham, Vương quốc Anh

    Matthew Brett

  17. Nhà nghiên cứu độc lập, San Francisco, CA, USA

    Joshua Wilson & G. Trẻ tuổi

  18. Khoa thống kê sinh học, Đại học California Berkeley, Berkeley, CA, Hoa Kỳ

    K. Jarrod Millman

  19. WayRay LLC, Trung tâm đổi mới Skolkovo, Moscow, Nga

    Nikolay Mayorov

  20. Tổ chức Khoa học và Công nghệ Hạt nhân Úc, Lucas Heights, NSW, Úc

    Andrew R. J. Nelson

  21. Viện Khoa học Trí não và Học tập, Đại học Washington, Seattle, WA, Hoa Kỳ

    Eric Larson

  22. Cao đẳng Khoa học Thông tin và Máy tính, Đại học Massachusetts Amherst, Amherst, MA, Hoa Kỳ

    C J Carey

  23. Nhà nghiên cứu độc lập, Amsterdam, Hà Lan

    İlhan Polat

  24. Trung tâm Vật lý Vũ trụ Berkeley, Đại học California Berkeley, Berkeley, CA, Hoa Kỳ

    Yu Feng

  25. Tập đoàn Bruker Biospin. , Billerica, MA, Hoa Kỳ

    Eric W. Moore

  26. Đại học Washington, Seattle, WA, Hoa Kỳ

    Jake VanderPlas

  27. Nhà nghiên cứu độc lập, Toulouse, Pháp

    Denis Laxalde

  28. Nhà nghiên cứu độc lập, Montreal, Quebec, Canada

    Josef Perktold

  29. Trung tâm Nghiên cứu Công nghệ Mới, Đại học West Bohemia, Plzeň, Cộng hòa Séc

    Robert Cimman

  30. Khoa Toán, Đại học Brigham Young, Provo, UT, Hoa Kỳ

    Ian Henriksen

  31. Viện Khoa học và Kỹ thuật Tính toán Oden, Đại học Texas tại Austin, Austin, TX, Hoa Kỳ

    Ian Henriksen

  32. Nhà nghiên cứu độc lập, Belmont, Massachusetts, Hoa Kỳ

    E. Một. tứ quý

  33. Phòng thí nghiệm Động lực học Không gian, North Logan, UT, Hoa Kỳ

    Charles R. Harris

  34. Nhà nghiên cứu độc lập, Logan, Utah, Hoa Kỳ

    Charles R. Harris

  35. Viện Anton Pannekoek, Amsterdam, Hà Lan

    Anne M. Archibald

  36. Chương trình sau đại học về Kỹ thuật điện, Đại học Liên bang de Minas Gerais, Belo Horizonte, Brazil

    Antônio H. Ribeiro

  37. Google LLC, Montréal, Québec, Canada

    Fabian Pedregosa

  38. Google LLC, Cambridge, MA, Hoa Kỳ

    Paul van Mulbregt

  39. Trung tâm Khoa học Lý thuyết Quốc tế, Viện Nghiên cứu Cơ bản Tata, Bangalore, Ấn Độ

    Aditya Vijaykumar

  40. Khoa Vật lý, Viện Công nghệ và Khoa học Birla, Pilani, Ấn Độ

    Aditya Vijaykumar

  41. Nhà nghiên cứu độc lập, Milan, Ý

    Alessandro Pietro Bardelli

  42. Viện Vật lý Môi trường, Đại học Bremen, Bremen, CHLB Đức

    Andreas Hillboll

  43. Khoa Khoa học Máy tính, Đại học Illinois tại Urbana-Champaign, Urbana, IL, Hoa Kỳ

    Andreas Kloeckner

  44. Phòng thí nghiệm Photonique, Numérique et Nanoscatics UMR 5298, Université de Bordeaux, Institut d'Optique Graduate School, CNRS, Talance, Pháp

    Antony Lee

  45. Viện khoa học điện tử Đại học Washington, Đại học Washington, Seattle, WA, Hoa Kỳ

    ariel rokem

  46. Hội đồng Thống đốc Cục Dự trữ Liên bang, Washington, DC, Hoa Kỳ

    Chad Fulton

  47. Công ty dữ liệu. , New York, NY, Hoa Kỳ

    Charles Masson

  48. Trụ sở chính, Orexplore, Stockholm, Thụy Điển

    Christian Häggström

  49. Khoa Thống kê, Đại học California - Davis, Davis, CA, Hoa Kỳ

    Clark Fitzgerald

  50. Đại học Emory, Atlanta, GA, Hoa Kỳ

    david a. Nicholson

  51. Toán sinh học ứng dụng, Concord, MA, Hoa Kỳ

    David R. hagen

  52. Khoa Khoa học Máy tính, Đại học Oxford, Oxford, Vương quốc Anh

    Đmitri V. Pasechnik

  53. Phòng thí nghiệm Tin học Thần kinh, Quỹ Bruno Kessler, Trento, Ý

    Emanuele Olivetti

  54. Nhà nghiên cứu độc lập, Chicago, IL, USA

    Eric Martin

  55. Khoa Kỹ thuật, Đại học Cambridge, Cambridge, Vương quốc Anh

    Eric Wieser

  56. Aix Marseille Univ, CNRS, Centrale Marseille, LMA, Marseille, Pháp

    vải Silva

  57. Trung tâm Điện toán Khoa học Liên ngành (IWR), Đại học Heidelberg, Heidelberg, Đức

    Người cho vay Felix

  58. Nghiên cứu Doanh nghiệp ABB, ABB AG, Ladenburg, Đức

    Người cho vay Felix

  59. Institut für Mathematische Optimierung, Technische Universität Carolo-Wilhelmina zu Braunschweig, Braunschweig, Đức

    Người cho vay Felix

  60. Nhà nghiên cứu độc lập, Cologne, Đức

    Florian Wilhelm

  61. Phòng thí nghiệm quốc gia Lawrence Berkeley, Berkeley, CA, Hoa Kỳ

    Gavin A. Giá bán

  62. Institut für Physik, Đại học Augsburg, Augsburg, Đức

    Gert-Ludwig Ingold

  63. Phòng thí nghiệm Nghiên cứu Ứng dụng, Đại học Texas tại Austin, Austin, TX, Hoa Kỳ

    Grêgôriô E. Allen

  64. Khoa X quang, Trường Y, Đại học Cincinnati, Cincinnati, OH, Hoa Kỳ

    Grêgôriô R. Lee

  65. Khoa X quang, Trung tâm Y tế Bệnh viện Nhi đồng Cincinnati, Cincinnati, OH, Hoa Kỳ

    Grêgôriô R. Lee

  66. Tập đoàn Ascent Robotics. , Tokyo, Japan

    Hervé Audren

  67. ENSTA Bretagne, Brest, Pháp

    Irvin Probst

  68. Khoa Vật lý, Ludwig-Maximilians-Universität, München, Đức

    Jörg P. Ăn kiêng

  69. Excellence Cluster Universe, München, Đức

    Jörg P. Ăn kiêng

  70. Nhà nghiên cứu độc lập, Malden, Massachusetts, Hoa Kỳ

    Jacob Silterra

  71. Khoa học dữ liệu, Chan Zuckerberg Biohub, San Francisco, CA, Hoa Kỳ

    James Webber

  72. Khoa Cơ khí, Đại học Ljubljana, Ljubljana, Slovenia

    Janko Slavič

  73. Trung tâm Tin học Sydney, Đại học Sydney, Camperdown, NSW, Australia

    Joel Nothman

  74. Instituto de Astrofísica, Pontificia Universidad Católica de Chile, Santiago, Chile

    Johannes Buchner

  75. Viện Vật lý ngoài Trái đất Max Planck, Garching, Đức

    Johannes Buchner

  76. Đại học Stuttgart, Phòng thí nghiệm Máy học và Người máy, Stuttgart, Đức

    Johannes Kulick

  77. Khoa Kỹ thuật Điện, Đại học Liên bang de Campina Grande, Campina Grande, Brazil

    José Vinícius de Miranda Cardoso

  78. Khoa Khoa học Máy tính, Đại học Kiel, Kiel, Đức

    Joscha Reimer

  79. Nhóm Khoa học Hành tinh và Viện Vũ trụ Florida và Khoa Vật lý, Đại học Trung tâm Florida, Orlando, FL, Hoa Kỳ

    Joseph Harrington

  80. Nhà nghiên cứu độc lập, Madrid, Tây Ban Nha

    Juan Luis Cano Rodríguez

  81. Monash Micro Imaging, Đại học Monash, Clayton, VIC, Úc

    Juan Nunez-Iglesias

  82. Khoa Sinh học Phân tử, Tế bào và Phát triển, Đại học Colorado, Boulder, Boulder, CO, Hoa Kỳ

    Justin Kuczynski

  83. Khoa Vật lý và Thiên văn học, Đại học Johns Hopkins, Baltimore, MD, Hoa Kỳ

    Kevin Tritz

  84. Nhà nghiên cứu độc lập, Munich, Đức

    Martin Thoma

  85. Trung tâm nguồn bức xạ tiên tiến, Đại học Chicago, Chicago, IL, Hoa Kỳ

    Matthew Newville

  86. Đại học Tübingen, Tübingen, Đức

    Matthias Kummerer

  87. Nhà nghiên cứu độc lập, Rugby, Vương quốc Anh

    Maximilian Bolingbroke

  88. Đầu tư hai Sigma, New York, NY, Hoa Kỳ

    Michael Tartre

  89. Khoa Cơ khí, Đại học Kỹ thuật Munich, Garching, CHLB Đức

    Mikhail Pak

  90. Nhà nghiên cứu độc lập, Berkeley, CA, USA

    Nathaniel J. thợ rèn

  91. Nhà nghiên cứu độc lập, London, Vương quốc Anh

    Nikolai Nowaczyk

  92. Nhà nghiên cứu độc lập, Berlin, Đức

    Nikolai Shebanov

  93. Tập đoàn Intel. , Austin, TX, Hoa Kỳ

    Oleksandr Pavlyk

  94. Nhà nghiên cứu độc lập, Horten, Na Uy

    mỗi A. Brodtkorb

  95. Nhà nghiên cứu độc lập, Thành phố Daly, CA, Hoa Kỳ

    Perry Lee

  96. D. e. Nghiên cứu Shaw, New York, NY, Hoa Kỳ

    Robert T. McGibbon

  97. Phòng Sinh học Hệ thống Tính toán, Khoa Khoa học Vi sinh và Hệ sinh thái, Đại học Vienna, Vienna, Áo

    La Mã Feldbauer

  98. Nhà nghiên cứu độc lập, Melbourne, Australia

    Sam Lewis

  99. Trường Vật lý và Thiên văn học, Đại học Manchester, Manchester, Vương quốc Anh

    Sam Tygier

  100. Kỹ thuật Điện và Máy tính, Đại học Wisconsin–Madison, Madison, WI, Hoa Kỳ

    Scott Sievert

  101. Dipartimento di Informatica, Đại học degli Studi di Milano, Milan, Ý

    Sebastiano Vigna

  102. Trung tâm liên trường đại học thiên văn học và vật lý thiên văn, Ganeshkhind, Pune, Ấn Độ

    Thêm

  103. Viện Vật lý và Toán học Vũ trụ Kavli, Kashiwa-shi, Nhật Bản

    Thêm

  104. Waymo LLC, Mountain View, CA, Hoa Kỳ

    tadeusz pudlik

  105. Khoa Kỹ thuật, Đại học Niigata, Nishi-ku, Niigata, Nhật Bản

    Takuya Oshima

  106. Học viện Bách khoa Virginia và Đại học Bang, Blacksburg, VA, Hoa Kỳ

    Thomas J. pingel

  107. Phần mềm Aperio, Trung tâm Nghệ thuật và Doanh nghiệp Headingley, Leeds, Vương quốc Anh

    Thomas P. Robitaille

  108. Nhà nghiên cứu độc lập, Duisburg, Đức

    Thomas Spura

  109. Học viện Broad, Cambridge, MA, Hoa Kỳ

    Thouis R. Jones

  110. Nhà nghiên cứu độc lập, Gainesville, FL, USA

    Tim Cera

  111. Khoa Tâm lý, Đại học Humboldt Berlin, Berlin, Đức

    Tiziano Zito

  112. Giải pháp Epiq, Schaumburg, IL, Hoa Kỳ

    Tom Krauss

  113. Viện Hệ thống phần mềm Max Planck, Kaiserslautern, Đức

    Utkarsh Upadhyay

  114. Khoa Tâm lý và Khoa học Não bộ, Đại học Dartmouth, Hanover, NH, Hoa Kỳ

    Yaroslav O. Halchenko

  115. Trường Kỹ thuật Jacobs, Đại học California San Diego, La Jolla, CA, Hoa Kỳ

    Yoshiki Vázquez-Baeza

tác giả

  1. Pauli Virtanen

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  2. Ralf Gommers

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  3. Travis E. Oliphant

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  4. Matt Haberland

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  5. Tyler Reddy

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  6. David Cournapeau

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  7. Evgeni Burovski

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  8. Pearu Peterson

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  9. Warren Weckesser

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  10. Jonathan Sáng

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  11. stéfan J. van der Walt

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  12. Matthew Brett

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  13. Joshua Wilson

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  14. K. Jarrod Millman

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  15. Nikolay Mayorov

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  16. Andrew R. J. Nelson

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  17. Eric Jones

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  18. Robert Kern

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  19. Eric Larson

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  20. C J Carey

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  21. İlhan Polat

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  22. Yu Feng

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  23. Eric W. Moore

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  24. Jake VanderPlas

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  25. Denis Laxalde

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  26. Josef Perktold

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  27. Robert Cimman

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  28. Ian Henriksen

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  29. E. Một. tứ quý

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  30. Charles R. Harris

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  31. Anne M. Archibald

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  32. Antônio H. Ribeiro

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  33. Fabian Pedregosa

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

  34. Paul van Mulbregt

    Xem các ấn phẩm của tác giả

    Bạn cũng có thể tìm kiếm tác giả này trong PubMed   Google Scholar

tập đoàn

khoa học viễn tưởng 1. 0 người đóng góp

  • Aditya Vijaykumar
  • , Alessandro Pietro Bardelli
  • , Alex Rothberg
  • , Andreas Hilloll
  • , Andreas Kloeckner
  • , Anthony Scopatz
  • , Antony Lee
  • , Ariel Rokem
  • , C. Rừng Nathan
  • , Chad Fulton
  • , Charles Masson
  • , Christian Häggström
  • , Clark Fitzgerald
  • , David A. Nicholson
  • , David R. hagen
  • , Dmitrii V. Pasechnik
  • , Emanuele Olivetti
  • , Eric Martin
  • , Eric Wieser
  • , Vải Silva
  • , Người cho vay Felix
  • , Florian Wilhelm
  • , G. Trẻ tuổi
  • , Gavin A. Giá bán
  • , Gert-Ludwig Ingold
  • , Gregory E. Allen
  • , Gregory R. Lee
  • , Hervé Audren
  • , Irvin Probst
  • , Jörg P. Ăn kiêng
  • , Jacob Silterra
  • , James T Webber
  • , Janko Slavič
  • , Joel Nothman
  • , Johannes Buchner
  • , Johannes Kulick
  • , Johannes L. Schönberger
  • , José Vinícius de Miranda Cardoso
  • , Joscha Reimer
  • , Joseph Harrington
  • , Juan Luis Cano Rodríguez
  • , Juan Nunez-Iglesias
  • , Justin Kuczynski
  • , Kevin Tritz
  • , Martin Thoma
  • , Matthew Newville
  • , Matthias Kümmerer
  • , Maximilian Bolingbroke
  • , Michael Tartre
  • , Mikhail Pak
  • , Nathaniel J. thợ rèn
  • , Nikolai Nowaczyk
  • , Nikolay Shebanov
  • , Oleksandr Pavlyk
  • , Mỗi A. Brodtkorb
  • , Perry Lee
  • , Robert T. McGibbon
  • , Roman Feldbauer
  • , Sam Lewis
  • , Sam Tygier
  • , Scott Sievert
  • , Sebastiano Vigna
  • , Stefan Peterson
  • , Surhud Thêm
  • , Tadeusz Pudlik
  • , Takuya Oshima
  • , Thomas J. pingel
  • , Thomas P. Robitaille
  • , Thomas Spura
  • , Thouis R. Jones
  • , Tim Cera
  • , Tim Leslie
  • , Tiziano Zito
  • , Tom Krauss
  • , Utkarsh Upadhyay
  • , Yaroslav O. Halchenko
  • & Yoshiki Vázquez-Baeza

Đóng góp

P. V. và R. G. lãnh đạo sự phát triển của SciPy trong hơn 10 năm. t. E. O. , E. J. và P. P. đã tạo SciPy. t. R. và M. H. soạn thảo bản thảo với đầu vào từ những người khác. Các tác giả có tên khác là nhà phát triển cốt lõi của SciPy. Tất cả các tác giả đã đóng góp mã, tài liệu và/hoặc kiến ​​thức chuyên môn quan trọng cho dự án SciPy. Tất cả các tác giả đã xem xét bản thảo

tác giả tương ứng

Thư từ cho Ralf Gommers, Matt Haberland hoặc Tyler Reddy

tuyên bố đạo đức

Lợi ích cạnh tranh

Các tuyên bố sau đây chỉ ra các liên kết trong ngành của các tác giả trong danh sách tác giả chính, nhưng không phải cho các tác giả trong SciPy 1. 0 nhóm cộng tác viên ngoài đó. Những liên kết này có thể đã thay đổi. r. G. đã làm việc cho Quansight LLC. t. E. O. , E. J. và R. K. đã làm việc cho En Thought, Inc. t. E. O. và tôi. H. Đã làm việc tại Anaconda Inc. N. M. đã làm việc cho WayRay LLC. e. W. M. đã làm việc cho Bruker Biospin Corp. F. P. và P. v. M. đã được tuyển dụng bởi Google LLC

Thông tin thêm

Thông tin đánh giá ngang hàng Rita Strack là biên tập viên chính của bài viết này và quản lý quy trình biên tập và đánh giá ngang hàng với sự cộng tác của các thành viên còn lại trong nhóm biên tập

Ghi chú của nhà xuất bản Springer Nature vẫn giữ thái độ trung lập đối với các khiếu nại về quyền tài phán trong các bản đồ đã xuất bản và các tổ chức liên kết

Thông tin bổ sung

Tóm tắt báo cáo

Quyền và quyền

Truy cập Mở Bài viết này được cấp phép theo Creative Commons Attribution 4. 0 Giấy phép Quốc tế, cho phép sử dụng, chia sẻ, điều chỉnh, phân phối và sao chép ở bất kỳ phương tiện hoặc định dạng nào, miễn là bạn cung cấp tín dụng phù hợp cho (các) tác giả gốc và nguồn, cung cấp liên kết đến giấy phép Creative Commons và cho biết . Hình ảnh hoặc tài liệu của bên thứ ba khác trong bài viết này được bao gồm trong giấy phép Creative Commons của bài viết, trừ khi có quy định khác trong hạn mức tín dụng đối với tài liệu. Nếu tài liệu không có trong giấy phép Creative Commons của bài viết và mục đích sử dụng của bạn không được phép theo quy định pháp luật hoặc vượt quá mức sử dụng được phép, bạn sẽ cần xin phép trực tiếp từ chủ sở hữu bản quyền. Để xem bản sao của giấy phép này, hãy truy cập http. //Commons sáng tạo. org/giấy phép/bởi/4. 0/

In lại và Quyền

Về bài viết này

Verify currency and authenticity via CrossMark

Trích dẫn bài viết này

Virtanen, P. , Gommers, R. , Oliphant, T. E. et al. khoa học viễn tưởng 1. 0. các thuật toán cơ bản cho tính toán khoa học trong Python. Nat Method 17, 261–272 (2020). https. //doi. tổ chức/10. 1038/s41592-019-0686-2

Python có tốt cho máy tính khoa học không?

Python là một trong những ngôn ngữ lập trình linh hoạt, phổ biến nhất hiện nay. Bạn có thể sử dụng nó cho mọi thứ, từ viết kịch bản cơ bản đến học máy. Trong Chứng chỉ Điện toán khoa học với Python, bạn sẽ tìm hiểu các nguyên tắc cơ bản của Python như biến, vòng lặp, điều kiện và hàm .

Python được sử dụng như thế nào trong điện toán khoa học?

Python có hỗ trợ tích hợp cho điện toán khoa học . Hầu hết các bản phân phối Python bao gồm hệ sinh thái SciPy (mã nguồn mở) bao gồm SciPy (thư viện SciPy), gói tính toán số được gọi là NumPy và nhiều bộ công cụ độc lập, mỗi bộ được gọi là Scikits.

Free Code Camp có hợp pháp không?

FreeCodeCamp là một tổ chức phi lợi nhuận cam kết cung cấp các khóa học viết mã miễn phí cho bất kỳ ai muốn học cách viết mã. Tổ chức cung cấp 10 chứng chỉ, mỗi chứng chỉ yêu cầu sinh viên hoàn thành năm dự án.

Codecademy hay freeCodeCamp cái nào tốt hơn?

Tuy nhiên, mặc dù Codecademy thường được coi là giải pháp thay thế tốt hơn , nhưng tôi phải nói rằng - nếu bạn đang muốn tiết kiệm một số tiền, .