Tại sao Python được sử dụng cho tính toán khoa học / hiệu năng cao (nhưng Ruby thì không)?


106

Có một trích dẫn từ một cuộc nói chuyện của PyCon 2011 :

Ít nhất trong cửa hàng của chúng tôi (Phòng thí nghiệm quốc gia Argonne), chúng tôi có ba ngôn ngữ được chấp nhận cho tính toán khoa học. Theo thứ tự này, chúng là C / C ++, Fortran trong tất cả các phương ngữ và Python. Bạn sẽ nhận thấy sự thiếu hoàn toàn và hoàn toàn của Ruby, Perl, Java.

Đó là trong bối cảnh chung hơn của điện toán hiệu năng cao. Cấp báo giá chỉ từ một cửa hàng, nhưng một câu hỏi khác về ngôn ngữ cho HPC , cũng liệt kê Python là một thứ để học (chứ không phải Ruby).

Bây giờ, tôi có thể hiểu C / C ++ và Fortran đang được sử dụng trong không gian vấn đề đó (và Perl / Java không được sử dụng). Nhưng tôi ngạc nhiên rằng sẽ có một sự khác biệt lớn trong việc sử dụng Python và Ruby cho HPC, vì chúng khá giống nhau. (Lưu ý - Tôi là người hâm mộ Python, nhưng không có gì chống lại Ruby).

Có một số lý do cụ thể tại sao một ngôn ngữ cất cánh? Có phải về các thư viện có sẵn? Một số tính năng ngôn ngữ cụ thể? Cộng đồng? Hoặc có thể chỉ là sự tiếp giáp lịch sử , và nó có thể đã đi theo một cách khác?


2
Tôi đề nghị rằng mặc dù cả hai đều là ngôn ngữ động, Python và Ruby khá khác nhau. Khác nhau nhiều hơn tương tự.
Adam Crossland

20
Tôi không biết đây là câu trả lời, nhưng - hãy nhớ rằng Python có nhiều 'lực kéo' hơn trước khi Ruby cất cánh bên ngoài một cộng đồng nhỏ với Rails (khoảng năm 2005-2006). Google đã sử dụng Python được một thời gian, điều này đã nâng cao hồ sơ của nó (đầu những năm 2000). Cú pháp của Python rõ ràng và dễ học và dễ đọc (và hãy nhớ rằng đây là thời đại khi Perl thực sự là lựa chọn chính duy nhất khác), vì vậy tôi nghĩ rằng điều đó thực sự đã đẩy tính toán khoa học về phía nó. Sau đó, có lẽ là tự củng cố, khi mọi người tạo ra NumPy / SciPy, MatPlotLib và nhiều gói máy tính khoa học khác.
wkl

4
Những người quan tâm đến câu hỏi này tôi cũng quan tâm đến việc kiểm tra trang web trao đổi ngăn xếp Khoa học tính toán .
Đánh dấu gian hàng

2
"số lượng dễ đọc"
jsbueno

1
Để cung cấp một số quan điểm Hóa học tính toán, việc song song hóa một phép tính với Python cũng rất đơn giản. Có lẽ cả hai điều này đều đúng trong Ruby. Tôi không biết.
Jonathan Landrum

Câu trả lời:


108

Tôi sẽ mở rộng nhận xét của tôi.

Tôi nghĩ rằng có một vài yếu tố ảnh hưởng đến việc sử dụng Python trong điện toán khoa học, mặc dù tôi không nghĩ có bất kỳ điểm lịch sử rõ ràng nào mà bạn có thể nói, "Vâng, đó là lý do tại sao Python được sử dụng trên Ruby / bất cứ điều gì khác "

Lịch sử ban đầu

Python và Ruby có cùng độ tuổi - theo Wikipedia, Python được phát hành chính thức lần đầu tiên vào năm 1991 và Ruby vào năm 1995.

Tuy nhiên, Python trở nên nổi bật sớm hơn Ruby, vì Google đã sử dụng Python và tìm kiếm các nhà phát triển Python vào thời điểm thiên niên kỷ. Vì chúng ta không có lịch sử sử dụng ngôn ngữ lập trình và ảnh hưởng của chúng đối với những người sử dụng chúng, nên tôi sẽ đưa ra giả thuyết rằng việc áp dụng Python sớm này của Google là một động lực lớn cho những người muốn mở rộng ra ngoài việc sử dụng Matlab, C ++, Fortran, Stata, Mathicala, v.v.

Cụ thể, ý tôi là Google đã sử dụng Python trong một hệ thống nơi họ có hàng ngàn máy (nghĩ song song và chia tỷ lệ) và liên tục xử lý nhiều triệu điểm dữ liệu (một lần nữa, tỷ lệ).

Sự kiện kết hợp

Điện toán khoa học từng được thực hiện trên các máy chuyên dụng như SGI và Crays (nhớ chúng không?), Và tất nhiên FORTRAN đã (và vẫn còn) được sử dụng rộng rãi do tính đơn giản tương đối của nó và vì nó có thể được tối ưu hóa dễ dàng hơn.

Trong thập kỷ gần đây, phần cứng hàng hóa (có nghĩa là thứ bạn hoặc tôi có thể đủ khả năng mà không phải là triệu phú) đã chiếm lĩnh trong lĩnh vực điện toán khoa học và đồ sộ. Nhìn vào 500 bảng xếp hạng hàng đầu hiện tại - nhiều 'siêu máy tính' được xếp hạng hàng đầu trên thế giới được xây dựng với phần cứng Intel / AMD bình thường.

Python xuất hiện vào thời điểm tốt vì một lần nữa, Google đang quảng bá Python và Google đang sử dụng phần cứng hàng hóa và họ có hàng ngàn máy.

Thêm vào đó, nếu bạn đào sâu vào một số bài báo tính toán khoa học cũ, chúng bắt đầu mọc lên vào khoảng thời đại 2000.

Hỗ trợ trước đó

Đây là một bài viết được viết cho Phần mềm và Hệ thống Phân tích Dữ liệu Thiên văn , được viết vào năm 2000, đề xuất Python là ngôn ngữ cho máy tính khoa học.

Bài viết có trích dẫn này về Python:

Python là một ngôn ngữ lập trình hướng đối tượng được giải thích đang bắt đầu nhận được sự chú ý đáng kể trong các ứng dụng khoa học (Python, 1999). Điều này là do Python và các ngôn ngữ kịch bản nói chung, đại diện cho một bước hợp lý tiếp theo cho nhiều dự án khoa học (Dubois 1994). Đầu tiên, Python cung cấp một ngôn ngữ lập trình được diễn giải có thể được xem như một phần mở rộng của các ngôn ngữ lệnh đơn giản đã được các chương trình khoa học sử dụng

Thứ hai, Python dễ dàng tích hợp với phần mềm được viết bằng các ngôn ngữ khác. Kết quả là, nó có thể đóng vai trò là ngôn ngữ điều khiển để điều khiển các chương trình hiện có cũng như ngôn ngữ kết dính để kết hợp các hệ thống khác nhau lại với nhau. Cuối cùng, Python cung cấp một bộ lớn các mô-đun của bên thứ ba, cơ sở người dùng được thiết lập và nhiều tài liệu dưới dạng sách và tài liệu tham khảo trực tuyến. Vì lý do này, người ta có thể xem nó như một phiên bản được đánh bóng và mở rộng của những gì các nhà khoa học thường cố gắng thực hiện khi viết trình thông dịch lệnh của riêng họ.

Vì vậy, bạn có thể thấy rằng Python đã có lực kéo từ cuối những năm 90, do nó có chức năng tương tự như các hệ thống hiện có vào thời điểm đó và vì nó dễ dàng tích hợp Python với những thứ như C và các chương trình hiện có. Dựa trên nội dung của bài viết, Python đã được sử dụng một cách khoa học từ khung thời gian 1995-1996.

Sự khác biệt trong tăng trưởng phổ biến

Sự nổi tiếng của Ruby bùng nổ cùng với sự nổi lên của Ruby On Rails, lần đầu tiên xuất hiện vào năm 2004. Tôi đã học đại học khi lần đầu tiên tôi thực sự nghe thấy tiếng vang về Ruby, và đó là vào khoảng năm 2005-2006. django cho Python được phát hành vào cùng khung giờ (tháng 7 năm 2005 theo Wiki), nhưng trọng tâm của cộng đồng Ruby dường như tập trung rất nhiều vào việc thúc đẩy việc sử dụng nó trong các ứng dụng web.

Python, mặt khác, đã có các thư viện phù hợp với tính toán khoa học:

  • NumPy - NumPy chính thức bắt đầu vào năm 2005, nhưng hai thư viện được xây dựng trên đã được phát hành trước đó: Numeric (1995) và Numarray (2001?)

  • BioPython - thư viện điện toán sinh học cho python, có từ năm 2001, ít nhất là

  • SAGE - Gói toán với bản phát hành công khai đầu tiên vào đầu năm 2005

Và nhiều hơn nữa, mặc dù tôi không biết nhiều dòng thời gian của họ (ngoài việc chỉ duyệt các trang tải xuống của họ), nhưng Python còn có SciPy (được xây dựng trên NumPy, phát hành năm 2006), có các ràng buộc với R (ngôn ngữ thống kê) trong đầu những năm 2000, có MatPlotLib và cũng có một môi trường vỏ thực sự mạnh mẽ trong ipython.

ipython được phát hành lần đầu tiên vào đầu những năm 2000 và đã có nhiều tính năng được thêm vào để làm cho nó rất tốt cho tính toán khoa học, như đồ thị matplotlib tích hợp và có thể quản lý các cụm tính toán .

Từ bài viết trên:

Nó cũng đáng chú ý một số dự án máy tính khoa học liên quan đến Python khác. Phần mở rộng Python số bổ sung thao tác ma trận và mảng nhanh cho Python (Dubois 1996), MMTK là bộ công cụ dựa trên Python để mô hình hóa phân tử (Hinsen 1999), dự án Biopython đang phát triển các công cụ dựa trên Python cho nghiên cứu khoa học đời sống (Biopython 1999), và Bộ công cụ trực quan hóa (VTK) là gói trực quan nâng cao với các ràng buộc Python (VTK, 1999). Ngoài ra, các dự án đang diễn ra trong cộng đồng Python đang phát triển các tiện ích mở rộng để xử lý và vẽ sơ đồ hình ảnh. Cuối cùng, công việc được trình bày trong (Greenfield, 2000) mô tả việc sử dụng Python trong các dự án tại STScI.

Danh sách tốt các gói khoa học và số cho Python .


Vì vậy, rất nhiều trong số đó có lẽ là do lịch sử ban đầu và sự tối nghĩa tương đối của Ruby cho đến những năm 2000, trong khi Python đã có được lực kéo nhờ truyền giáo của Google.

Vì vậy, nếu bạn đang đánh giá các ngôn ngữ kịch bản trong giai đoạn từ 1995 - 2000, bạn thực sự đang nhìn gì? Có Perl, có lẽ đủ khác biệt về mặt cú pháp mà mọi người không muốn sử dụng nó, và sau đó có Python, có cú pháp rõ ràng hơn và dễ đọc hơn.

Và vâng, có lẽ có rất nhiều tự củng cố - Python đã có tất cả các thư viện hữu ích, tuyệt vời này cho máy tính khoa học, trong khi Ruby có tiếng nói thiểu số ủng hộ việc sử dụng nó trong khoa học, và có một số thư viện mọc lên, như SciRuby , nhưng Các công cụ của Python đã trưởng thành hơn thập kỷ qua.

Cộng đồng của Ruby nói chung dường như rất quan tâm đến việc phát triển Ruby như một ngôn ngữ web, vì đó là điều thực sự khiến nó được biết đến, trong khi Python bắt đầu trên một con đường khác, và sau đó được sử dụng rộng rãi như một ngôn ngữ web.


8
Tôi đã quên một chút về tích hợp c. Trong nhiều trường hợp, một tính toán khoa học là chuyên sâu tính toán, và có thể viết thói quen ac chỉ với bit đó là một lợi thế quan trọng.
Spencer Rathbun

1
@SpencerRathbun Bài viết tôi đã liên kết đề cập đến việc sử dụng Python với SWIG để tạo các trình bao bọc và cho phép Python tương tác với mã C / C ++. SWIG đã không nhận được sự hỗ trợ chính thức của Ruby cho đến khi Ruby 1.6, được phát hành vào năm 2004. Vì vậy, Python đã có một khởi đầu lớn chỉ trong tâm trí và công cụ xung quanh nó phù hợp để cho phép mọi người đưa Python vào hệ thống hiện có của họ. Không phải bỏ tất cả mã FORTRAN / C được tối ưu hóa hiện có đang sử dụng có lẽ là trình điều khiển lớn nhất.
wkl

3
Vào năm 1991, chúng tôi đã sử dụng TCL để kết nối các thư viện số với nhau như một cách phân tích dữ liệu mà không phải viết hàng loạt C / Fortran. Python xuất hiện đúng lúc để thay thế TCL. Dễ dàng giao tiếp với 'C' (và bởi F2C với fortran) là vấn đề lớn so với PERL, giao diện TCL với 'C' rất dễ dàng
Martin Beckett

Các quy trình đính kèm ưu tiên giải thích rất nhiều về những ngôn ngữ được sử dụng. Đó là Zipfian! Xem "PAP" Myatery "PAP" được giải thích lúc 12:50 vào nó.
radarbob

37

Tôi đã sử dụng Python rộng rãi cho các ứng dụng kỹ thuật và Ruby cho các ứng dụng web.

Vấn đề tôi thấy với Ruby như một ngôn ngữ khoa học là có quá nhiều tùy chọn cú pháp cho một thao tác nhất định.

Python được thiết kế với tiền đề sau "Nên có một - và tốt nhất là chỉ có một cách rõ ràng để làm điều đó". Điều này làm cho nó dễ dàng hơn để đọc mã của ai đó và xác định ý định của nó. Đây là chìa khóa để đánh giá ngang hàng cho kỹ thuật, vv

Tôi thích Ruby và nó rất tuyệt cho một số tác vụ nhất định, nhưng mã Ruby của tôi có thể hoàn toàn khác về mặt cú pháp so với mã của một lập trình viên khác thực hiện chính xác điều đó. Điều này gây ra quá nhiều sự mơ hồ trong môi trường khoa học hoặc kỹ sư.


3
Vâng thực sự. Ruby là trong truyền thống TIMTOWTDI, và do đó chỉ là một Perl tốt hơn một chút. Phần mềm được viết cho các lập trình viên. Trình biên dịch / phiên dịch, theo nghĩa đó, là một đối tượng thứ cấp. Các nhà khoa học có xu hướng nghiêm túc về việc hoàn thành công việc của họ mà không có quá nhiều sự can thiệp từ phần mềm khó khăn không cần thiết. QED
Dominic Cronin

4
Không chắc chắn tôi làm theo lập luận này. Nếu lập trình viên và không phải là một cỗ máy là đối tượng chính, có những lúc từ ngữ khác nhau sẽ cải thiện sự rõ ràng và làm nổi bật ý định. Không phải một ngôn ngữ linh hoạt hơn sẽ giúp hiểu được bộ não con người mềm mại của chúng ta?
Andrew Vit

10
Nhưng C cũng có thể trông giống như một vụ nổ tại Nhà máy ASCII. Hãy nhớ lại rằng trong C, một mảng là một giao diện xung quanh con trỏ. Vì vậy, mảng [5] có thể được viết thay thế là * (mảng + 5) có thể được viết thay thế là * (mảng 5 +) có thể được viết thay thế là 5 [mảng]. Mà là ngu ngốc.
Jonathan Landrum

1
Tôi là một lập trình viên perl rất dài hạn và nó vẫn là ngôn ngữ yêu thích của tôi cho hầu hết các mục đích. Không chắc chắn về toán học mặc dù. Tôi không đồng ý với thái độ này đối với phương pháp TIMTOWTDI. Có sẵn nhiều cách tiếp cận không có nghĩa là tất cả chúng đều tốt, nhưng điều quan trọng là có thể điều chỉnh biểu thức của bạn sao cho nó ánh xạ rõ ràng và trực tiếp đến ý tưởng bạn đang thể hiện, cho cả đối tượng người và máy của bạn. Thiếu các tùy chọn cú pháp không giúp được điều đó.
mc0e

@AndrewVit: Không nhất thiết. TIMTOWTDI hoạt động tuyệt vời nếu bạn có một nhà phát triển hoặc nếu bạn có một nhóm các nhà phát triển nhỏ, được tích hợp chặt chẽ. Nhưng ngay sau khi bạn có những người chưa bao giờ gặp làm việc trên cùng một mã, bạn sẽ bắt đầu tự hỏi "Ồ, tại sao họ làm điều đó cách?" Hoặc, thay vào đó, bạn sẽ viết một hướng dẫn về phong cách để buộc mọi người làm theo cách tương tự, và sau đó bạn sẽ không làm TIMTOWTDI nữa.
Kevin

17

Theo phỏng đoán, một phần lớn của nó sẽ là sự phụ thuộc vào matlab bởi rất nhiều nhà nghiên cứu. Python có các lựa chọn thay thế, chẳng hạn như cây xô thơm . Trong khi đó ruby ​​thì không, hoặc ít nhất là không có thứ rõ ràng.

Thứ hai, theo Câu hỏi thường gặp của Ruby , python có cả hướng thủ tục và đối tượng, trong khi ruby giả dạng như một ngôn ngữ thủ tục. Nếu bạn đang viết một kịch bản nhỏ cho mục đích toán học, như những gì bạn làm trong matlab, mô hình OO là một vấn đề đau đầu. Không chỉ vậy, nó còn buộc một bước nhảy khái niệm ra khỏi các mô hình chức năng / thủ tục mà các nhà nghiên cứu sử dụng. Toán học không phải là OO. Toán học là chức năng, tiếp theo là thủ tục (nghĩ bằng chứng logic).

Cuối cùng, lưu ý rằng Ruby FAQ nói rằng ruby ​​phức tạp hơn python. Lập trình đứng thứ hai cho các nhà nghiên cứu, không phải đầu tiên như chúng tôi.


22
Tôi nghĩ rằng điều OO là một chút cá trích đỏ. Một nhà nghiên cứu quan tâm đến việc biểu thức 1 + 1gửi thông điệp +đến đối tượng là 1gì? Điều đó không thay đổi cấu trúc chương trình của bạn một chút.
sepp2k

1
@ sepp2k, tôi nghĩ Spencer đang gợi ý rằng Ruby sẽ yêu cầu các nhà khoa học lập trình khác nhau. Tôi không biết Ruby, nhưng giả sử bạn phải tạo các đối tượng để viết chương trình bằng Ruby, trong khi Python cho phép các thủ tục - điều này sẽ thêm vào chi phí tinh thần. Cấp không nhiều, nhưng đối với một người không lập trình, mỗi một chút công việc làm thêm sẽ là một lý do để sử dụng ngôn ngữ khác.
Cyclops

7
@ Cyclops Tôi nhận được những gì anh ấy đề nghị. Tôi đang nói nó sai. Toàn bộ điểm của trích dẫn về việc ruby ​​giả mạo như một ngôn ngữ thủ tục là bạn không cần phải cấu trúc chương trình của mình theo cách hướng đối tượng. Nếu bạn nhập một cái gì đó như "2 + 2", bạn đang tạo hai đối tượng Integer và gọi một phương thức trên một (truyền đối tượng kia làm đối số). Tuy nhiên, điều đó không khiến việc gõ "2 + 2" trong ruby ​​tốn nhiều công sức hơn so với việc gõ "2 + 2" bằng các ngôn ngữ khác.
sepp2k

5
Tôi với sepp2k, tôi cũng không mua đối số đó. Một số ngôn ngữ, như Java, bắt buộc mô hình OO đối với bạn - không như vậy với Ruby. Điều gì ngăn bạn viết một chương trình hoàn toàn theo thủ tục hoặc chức năng trong Ruby?
Mike Baranczak

2
@Cyclops chính xác. Mặc dù Ruby có thể giả vờ là thủ tục, nhưng trong một bối cảnh không tầm thường, bạn sẽ gặp phải tình huống trong đó mô hình OO làm cho ngôn ngữ hoạt động theo một cách nhất định. Nếu bạn không hiểu hoặc bỏ qua điều đó, thì bạn sẽ không thể làm những gì bạn muốn hoặc bạn kết thúc với một vụ hack lộn xộn.
Spencer Rathbun

14

Khi BDFL (Guido van Rossum) lần đầu tiên viết Python, mục tiêu là nó dễ hiểu như tiếng Anh thông thường (đề xuất tài trợ DARPA) sẽ loại bỏ các lỗi mã hóa phổ biến.

Một vấn đề rất dễ thấy là việc sử dụng thụt lề để phân định các khối. Trong các ngôn ngữ có các dấu phân cách câu lệnh phức tạp rõ ràng (ví dụ: dấu ngoặc C, khoảng trắng Pascal BEGIN / END) sẽ được thu gọn thành một ký tự khoảng trắng trước khi đưa mã vào từ vựng. Điều này sẽ cho phép sự thay đổi lớn trong cách đặt mã.

Đối với các lập trình viên chuyên nghiệp thì đây không phải là vấn đề vì họ đã tự đào tạo để đối phó với nó từ 30 giờ trở lên trong một tuần thực hành.

Đối với các chuyên gia khác, nơi lập trình là một công cụ, vấn đề này trở thành một vấn đề lớn. Nhóm này bao gồm các nhà toán học, vật lý học, nhà hóa học, kỹ sư, v.v.

Vì Python giảm lỗi cho các lập trình viên không chuyên nghiệp, nó cho phép họ suy nghĩ về vấn đề họ đang cố gắng giải quyết và không phải đối phó với các cơ chế của ngôn ngữ nhiều như vậy.

Đây là một ví dụ duy nhất về lý do tại sao nó phổ biến ngoài nghề lập trình. Có những ví dụ khác có thể được sử dụng để minh họa cho cùng một điểm như pin đi kèm, Zen of Python ( import this), sử dụng sự hài hước của Monty Python, v.v.


Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào cho một luận án hoặc chương trình tiến sĩ trong danh sách sơ yếu lý lịch hoặc ấn phẩm của Guido . Bạn có một trích dẫn cho điều đó? Cuộc phỏng vấn này chỉ nói rằng ông là một nhà nghiên cứu tại CWI.
M. Dudley

Tôi hoàn toàn nhầm lẫn về điều đó: Tôi đã đọc rằng anh ấy đã làm luận án về nó, nhưng không thực hiện nghiên cứu thích hợp về nó. Tôi đã tìm thấy lỗi của mình sau khi tôi đã viết bài đăng này, nhưng sau đó không bao giờ sửa lỗi ở đây. Cảm ơn.
Lance Helsten

5

Đây là một cuộc thảo luận tuyệt vời ở đây, tôi nghĩ rằng bài viết ở đây thực sự đã trả lời tại sao trăn phổ biến hơn trong cộng đồng khoa học. Tuy nhiên, có một số đối số phản biện cho khoa học ruby:

  • ruby có thể được mã hóa bằng trực giác hơn python (DSL, v.v.): được cung cấp đúng gói được sử dụng:

    kiểm tra bioruby: http://bioruby.org/ dự trữ chuỗi có thể chỉ đơn giản là: s.reverse, v.v. nếu bạn sử dụng cơ sở dữ liệu: API ràng buộc cơ sở dữ liệu ruby ​​tốt hơn nhiều so với python.

  • ruby cho phép mức độ trừu tượng cao hơn cùng một lúc là ngắn gọn.

  • hệ thống quản lý gói tốt hơn: đá quý ruby ​​dễ dàng hơn so với: setuptools, pip, v.v.

Tuy nhiên, việc áp dụng ruby ​​đã / đang / sẽ bị cản trở bởi sự phức tạp của nó. Tôi nghĩ Lisp là một ngôn ngữ tuyệt vời / mạnh mẽ, nhưng tại sao nó không cất cánh như một ngôn ngữ chung? tình huống tương tự cũng xảy ra với ruby ​​- nó thừa hưởng rất nhiều sức mạnh từ những câu nói nhỏ, nói nhỏ và perl!: nhưng chỉ một lựa chọn của những người sẽ thực sự sử dụng nó để có được lợi ích. Cuối cùng, nó có thể vẫn mạnh ở một số lĩnh vực / lĩnh vực đặc biệt nhất định (như đường ray trong web, con rối trong cấu hình), thật khó để 'những người không lập trình có thể thưởng thức nó hoàn toàn, nhưng đó có thể là người bạn tốt của lập trình viên các nhà khoa học thích ngôn ngữ này: http://www.cleveralerskyms.com/nature-inspired/index.html )

Một số cập nhật gần đây nhất: có vẻ như python đã chiếm lĩnh cảnh quan. Gần đây, những cuốn sách như: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 và nhiều cuốn sách khác (phân tích dữ liệu, học máy, v.v.), tất cả đều được viết bằng python như ngôn ngữ được sử dụng . Nếu ruby ​​muốn bắt kịp, nó cần một số nỗ lực nghiêm túc. Xem xét matplotlib trong trăn, có lẽ phải mất vài năm để đưa nó đến trạng thái như bây giờ. Trừ khi một số nỗ lực nghiêm túc đặt vào ruby, có lẽ nó không thể bắt kịp giai đoạn phân tích dữ liệu / tính toán khoa học của trăn trong 2-3 năm tới.


3

Sau khi sử dụng python để phân tích dữ liệu một thời gian (xuất phát từ kinh nghiệm làm việc với ruby, lua và R), gói numpy (và nhiều thư viện khoa học có liên quan) làm cho nó có thể 'chạy' tính toán nhanh (tốc độ tương tự như C, như numpy được viết / tích hợp với mã C) với sự dễ dàng lập trình trong python.

Numpy đã tồn tại được một thời gian, sự sẵn có của nó đã giúp xây dựng nhiều gói khoa học liên quan khác, chẳng hạn như scipy, gấu trúc ... vv Có những công cụ tuyệt vời làm cho trăn trở thành một hệ sinh thái tuyệt vời cho điện toán khoa học, trong khi ở Ruby, ma trận nhanh hơn tương tự thư viện tính toán chỉ đang được phát triển (NMtrix: https://github.com/SciRuby/nmatrix ). Sự khác biệt lớn về thời gian này làm cho python trở thành sự lựa chọn rõ ràng cho máy tính khoa học.


5
"Cuối cùng, python giống như ngôn ngữ của mọi người", bạn sẽ cần cung cấp một nguồn để sao lưu này.
Walter

2

Tôi đã tự hỏi điều tương tự. Tôi nghĩ đó là, như Spencer Rathbun nói, vì khía cạnh thủ tục của Python. Bản thân là một người "không phải lập trình viên", tôi thấy thật tuyệt khi cách bạn có thể viết mã trong Ruby và khung Rails là tuyệt vời để dễ sử dụng. Tuy nhiên, khi mã hóa cho các mục đích khoa học (toán học, sinh học, v.v.), bạn thường nghĩ theo ngôn ngữ "toán học", nghĩa là bạn không quan tâm đến các câu như

Person.find_by_name 'Juanito'

nhưng bạn quan tâm nhiều hơn về

A = B*C + D

Vì vậy, tôi nghĩ rằng Ruby rất mạnh khi nhiều tính năng của nó sẽ không được sử dụng trong một chương trình khoa học. Nghĩ về thủ tục thì dễ hơn.


0

Python có hỗ trợ tốt hơn cho mảng N chiều với gói Numpy. Tôi chưa thấy gì tương tự với Ruby.

Python dường như nhanh hơn trong điện toán số / tính toán khoa học mà tôi đã làm. Tôi không có bằng chứng nào khác ngoài khi tôi đã viết các thuật toán tương tự bằng Python và Ruby, các thuật toán Python chạy nhanh hơn (YMMV).


2
Điều này không thực sự đóng góp nhiều cho các cuộc thảo luận. Hiệu quả của Numpy đã được đề cập (chi tiết hơn) trong câu trả lời được chấp nhận . Đối số hiệu suất của bạn vẫn không thuyết phục; Tôi không thích dựa vào giai thoại khi thảo luận về hiệu suất lịch sử, đặc biệt là khi bất kỳ lập luận nào như vậy có lẽ đã được bảo vệ tốt với các tiêu chuẩn đáng tin cậy (tốt, đáng tin cậy hơn so với giai thoại không có ngữ cảnh).
Brian

@Brian, đồng ý.
Josh Petitt

@Brian, đóng góp cụ thể của tôi là nhận xét về mảng N chiều. Đây là cốt lõi của những gì Numpy được xây dựng xung quanh, vâng, nhưng tôi không thấy bất kỳ đề cập nào về mảng ND. Đây là cốt lõi của đại số tuyến tính và những gì Matlab và Numpy làm tốt. Ruby sử dụng mảng như lập trình viên sử dụng mảng, không giống như kỹ sư và nhà khoa học sử dụng mảng (tức là ma trận). Nếu bạn nghĩ rằng nó sẽ có ích, tôi sẽ thêm một nhận xét về mảng ND vào câu trả lời được chấp nhận.
Josh Petitt

@Brian, và tôi vẫn bình luận rằng tôi chưa thấy hỗ trợ mảng ND tốt cho Ruby cho máy tính khoa học.
Josh Petitt

0

Một lý do là Python có hỗ trợ tốt cho việc sử dụng / tích hợp / gọi mã C / C ++, trong khi theo hiểu biết của tôi thì Ruby không cung cấp mức độ tích hợp (dễ dàng) như nhau. Điều này có nghĩa là bạn có thể viết các thành phần mã hiệu suất cao trong C / C ++, sau đó sử dụng Python (tức là ngôn ngữ cấp cao / dễ nhìn hơn) để dán toàn bộ mọi thứ lại với nhau. Tôi tưởng tượng rằng đây cũng là một trong những lý do cho việc áp dụng thể chế ban đầu của Google.


0

Tôi nghĩ một trong những lý do chính khiến Python trở nên phổ biến đối với khoa học dữ liệu là vì lượng thời gian / công sức (nghĩa là tiền) mà chúng ta có thể tiết kiệm để mở rộng các tập lệnh của mình cho giải pháp thực sự (ví dụ: hệ thống phần mềm). Với Python, chúng ta có thể dễ dàng xây dựng một giải pháp hệ thống dựa trên mã mà chúng ta đã viết cho khoa học dữ liệu.

Tôi có kinh nghiệm với việc tìm kiếm một ngôn ngữ thông dịch viên với tính năng này khoảng 15 năm trước. Vào thời điểm đó, Python được chọn là ngôn ngữ, không phải vì nó là ngôn ngữ hoàn hảo cho khoa học dữ liệu, mà bởi vì nó là ngôn ngữ OOP hiếm hoi với trình thông dịch nhanh / di động cũng có thể mở rộng để giao tiếp với các ngôn ngữ khác như C / C ++ / Java. Không giống như ngày nay, đó là những tính năng tuyệt vời nhưng hiếm có để xây dựng các giải pháp trực tiếp từ mã cơ sở đã được triển khai cho khoa học dữ liệu.

Thời gian có thể là một yếu tố quan trọng khác để tạo ra một ngôn ngữ khoa học dữ liệu. 15 năm trước, chúng tôi đã tìm thấy đã có các gói cơ bản như số và scipy cho tính toán số trong Python, nhưng chúng tôi thậm chí không biết sự tồn tại của Ruby như một ngôn ngữ lập trình. Vào cuối năm 2018, tôi có thể tìm thấy một số dự án sử dụng Ruby cho khoa học dữ liệu. Có lẽ 10 năm sau, người ta có thể hỏi tại sao Ruby lại phổ biến như vậy đối với AI.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.