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
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 Ở đâ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 Đế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 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 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 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-listSciPy 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
Hộp 2 Tổ chức trọn góiThư 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 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 khaiPhạm vi dự ánSciPy 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. csgraph và spatial 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
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à ABIAPI 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ệuma trận thưa thớtscipy. 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ức và scipy. 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ể. cKDTreescipy . 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ịchMức độ thấpCó thể gọiKể 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ệtSciPy đã 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_lapack và scipy. đặ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ínhTrì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-ncg và trust-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ầuVì 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ứcTrong 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, Akima1DInterpolator và PCHIPInterpolator . Bộ kiểm tra và điểm chuẩnbộ thử nghiệmPhá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 pyflakes và pycodestyle . 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 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ẩnNgoà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. Đ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 đồngquả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ópDự á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ưuHệ 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ậnSciPy 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áoThô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 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 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 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 Oliphant, T. E. Hướng dẫn về NumPy lần đầu xuất bản (Trelgol Publishing USA, 2006) 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ả 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ả 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 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) 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ả 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 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 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ả 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) 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) Cảng, O. giải pháp đơn giản. BusinessWeek, 24–24 (3 tháng 10 năm 2005) 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) 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) Hugunin, J. Mở rộng Python để tính toán số, http. //hugunin. net/giấy tờ/hugunin95numpy. Html (1995) 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) 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) 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) 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ả 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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) 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ả 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ả 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ả 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ả 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ả 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 GitHub. Mạng phụ thuộc - scipy/scipy, https. //github. com/scipy/scipy/mạng/người phụ thuộc (2019) 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ả 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) 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ả 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ả 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ả 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) Koelbel, C. H. & Zosel, M. E. Cẩm nang FORTRAN hiệu suất cao (Nhà xuất bản MIT, 1993) 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) 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) Dierckx, P. Lắp đường cong và bề mặt với Splines (Oxford Univ. báo chí, 1993) 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) 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) 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) 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ả 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) 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ả 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) 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) 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ả 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) 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ả 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ả 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) 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) 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) 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) 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) 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) 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) 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) 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) 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ả 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) 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) 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) Bộ vấn đề kiểm tra NETLIB LP, http. //www. số. rl. AC. anh/dễ thương/netlib. html (2019) 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ả 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 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ả 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 Dierckx, P. Lắp đường cong và bề mặt với Splines (Oxford Univ. báo chí, 1993) Virtanen, P. ENH. nội suy. viết lại đánh giá ppform trong Cython, https. //github. com/scipy/scipy/pull/2885 (2013) Burovski, E. thêm b-splines, https. //github. com/scipy/scipy/pull/3174 (27 tháng 12 năm 2013) de Boor, C. Hướng dẫn thực hành về Splines (Springer, 1978) 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) 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ả 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ả Beck, K. Hướng phát triển thử nghiệm. Bằng ví dụ (Addison-Wesley, 2003) 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 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) 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ả 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) 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 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) 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ả 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) 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ả 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) 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ả 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ả 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ả Nocedal, J. & Wright, S. Numerical Optimization tái bản lần 2 (Springer Science & Business Media, 2006) 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ả 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ả 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ả 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ả 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ả 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) 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ả 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) 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ả Kết nối, A. R. , Gould, N. I. M. & Toint, P. L. Phương pháp vùng tin cậy (SIAM, 2000) 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ả 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ả 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) 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ả 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) 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ả 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ậnChú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ả
Tác giả và Chi nhánh
tác giả
tập đoànkhoa học viễn tưởng 1. 0 người đóng góp
Đóng gópP. 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 ứngThư từ cho Ralf Gommers, Matt Haberland hoặc Tyler Reddy tuyên bố đạo đứcLợi ích cạnh tranhCá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êmThô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ổ sungTóm tắt báo cáoQuyền và quyềnTruy 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àyTrích dẫn bài viết nàyVirtanen, 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, . |