Câu hỏi mềm: Trường hợp Python phù hợp với hình ảnh?


9

Vì vậy, tôi đã tranh luận về việc tôi có nên học Python không. Từ việc nói chuyện với các giáo sư của tôi, Matlab dường như là ngôn ngữ phổ biến được sử dụng trong toán học ứng dụng / khoa học tính toán khi có liên quan đến giới học thuật ; trong khi trong ngành công nghiệp , các giáo sư của tôi (đặc biệt là những người đã làm việc trong ngành công nghiệp) đã nói rằng học c ++ là con đường an toàn nhất.

Tôi muốn nghe ý kiến ​​của các bạn, trong cả học viện và ngành công nghiệp, về việc liệu tôi có nên bận tâm đến Python hay không, hoặc thực sự hiểu rõ những gì tôi biết (MATLAB và C ++) trong thời điểm hiện tại.

Cập nhật : Geoff mang đến một điểm tốt, có lẽ tôi nên trình bày thêm một số chi tiết:

Tôi hiện đang là sinh viên năm cuối, đang học toán với chuyên ngành tính toán. Tôi muốn theo đuổi một trường học tốt nghiệp và ở lại nghiên cứu (tôi chưa bao giờ thấy mình thích dạy học) hoặc làm việc trong phòng thí nghiệm. Cả hai đều lý tưởng. Đối với lĩnh vực nghiên cứu nào, có lẽ là một cái gì đó dọc theo dòng phân tích hoặc xác suất số. Trong trường hợp kế hoạch A không thành công, tôi sẽ sẵn sàng làm việc trong ngành, miễn là chuẩn bị cho bản thân mình cho ngành công nghiệp không lấy đi quá nhiều thời gian từ trường học. Vì vậy, tôi nghĩ rằng tôi nên học các ngôn ngữ phổ biến trong công nghiệp chỉ như một bản sao lưu. Nhưng đây cũng là lý do khiến tôi mâu thuẫn. Tôi không thể học mọi ngôn ngữ hoặc chuẩn bị cho mọi khả năng vì điều đó sẽ chiếm quá nhiều thời gian.


1
Câu hỏi của bạn là một câu hỏi hay, nhưng có lẽ hơi quá mở và mơ hồ. Bạn đang học ngành học nào, và bạn nghĩ bạn có thể muốn làm gì?
Geoff Oxberry

1
Để biết ví dụ về những điều có thể được thực hiện với Python sẽ không hoạt động tốt trong MATLAB hoặc C ++ thuần túy: epub.siam.org/doi/abs/10.1137/110856976 . (cảnh báo tự quảng cáo không biết xấu hổ)
David Ketcheson

Câu trả lời:


15

Một khó khăn với bất kỳ loại câu hỏi nào là câu trả lời phụ thuộc nhiều vào cộng đồng.

Để trả lời một số câu hỏi của bạn theo thứ tự hỗn loạn:

MATLAB được sử dụng rất nhiều cả trong học viện và trong công nghiệp. Một trong những lý do nó được sử dụng khá nhiều trong công nghiệp là vì nó được dạy trong học viện. Tôi biết một thực tế rằng MATLAB được sử dụng tại Phòng thí nghiệm Lincoln và trong các bộ phận nghiên cứu và phát triển của DuPont.

Có những gói phần mềm được viết bằng Python rất tốt trong tính toán tượng trưng, ​​chẳng hạn như sympy và SAGE. Tùy thuộc vào sở thích cụ thể của bạn, yêu cầu tính năng và sở thích cá nhân, Mathicala (hoặc Maple hoặc các hệ thống đại số máy tính khác) có thể vượt trội so với các gói này.

MATLAB có Hộp công cụ toán học tượng trưng có thể được sử dụng cho một số tính toán tượng trưng, ​​nhưng khả năng thao tác biểu tượng của nó, theo kinh nghiệm của tôi, yếu hơn Mathicala và Python. Một số thao tác tượng trưng về mặt lý thuyết có thể được thực hiện trong C ++, nhưng nó không hiệu quả. MATLAB cũng không phải là một ngôn ngữ có mục đích chung tốt. Nó làm đại số tuyến tính và toán học số tốt, nhưng nó không có khả năng đầu vào / đầu ra tốt. Nó không có khả năng song song tốt (mặc dù có các biến thể như MATLAB song song, MATLAB Star-P và Hộp công cụ tính toán song song) so với C ++ hoặc Python. Ngay cả khả năng đồ họa của nó có thể sử dụng một số công việc. MATLAB cũng đắt tiền trừ khi bạn liên kết với một tổ chức có giấy phép. Mỗi hộp công cụ là đắt tiền để mua, và thường chi phí cho đơn hàng hàng trăm đến hàng ngàn đô la.

Mathicala không tính toán số ngoài tính toán tượng trưng. Tôi chưa thấy mọi người sử dụng nó để tính toán số lượng nhiều như tôi đã thấy mọi người sử dụng Python và MATLAB cho công việc số. Nó cũng có khả năng song song, nhưng sẽ không mở rộng cho các siêu máy tính lớn.

Python là một ngôn ngữ có mục đích chung tốt, được coi là dễ học và có thể sử dụng. Nó được sử dụng trên các siêu máy tính lớn (ví dụ, xem PyClaw, petc4py, mpi4py, và các loại khác), và quy mô tốt. Nó cũng có các gói số được đánh giá cao (như NumPy và SciPy); một cộng đồng rộng lớn, tích cực; khả năng xử lý đầu vào / đầu ra tốt; và các thư viện đồ họa tốt, cùng với một kho thư viện lớn (kiểm tra PyPI). Nó là miễn phí, so với các gói độc quyền được đề cập ở trên. Bạn có thể tìm thấy hầu hết các chức năng của MATLAB hoặc Mathicala trong các gói Python có sẵn miễn phí. Nhược điểm chính của Python là nó có xu hướng chậm hơn các ngôn ngữ được biên dịch như C ++, mặc dù nhược điểm này đang giảm dần với sự phát triển liên tục của Cython, Numba và PyPy; nó cũng có thể được giảm thiểu bằng cách thay thế mã Python chậm hơn bằng mã C (hoặc C ++ hoặc Fortran) và các trình bao bọc Python được viết một cách thích hợp. Được giải thích, nhiều người báo cáo năng suất cao hơn với Python so với các ngôn ngữ được biên dịch. Nó khá phổ biến, và có lẽ đáng để học hỏi nếu bạn có thời gian.

C ++ là một ngôn ngữ phức tạp và việc sử dụng nó trong khoa học tính toán đang gây tranh cãi. Bộ tính năng lớn của nó có thể giúp bạn dễ dàng viết phần mềm khó bảo trì và mất thời gian để biên dịch. Tuy nhiên, được sử dụng một cách thận trọng, các tính năng như tạo khuôn mẫu và quá tải toán tử có thể được sử dụng rất hiệu quả, vì nó đã có trong các dự án như deal.II, Blaze và Elemental (trong số những thứ khác). C ++ có một đường cong học tập dốc khi nói đến các tính năng nâng cao của nó và tôi đã nghe các báo cáo giai thoại về những người mất nhiều năm để cảm thấy như họ đã học ngôn ngữ đầy đủ. Tuy nhiên, nó cũng là một ngôn ngữ phổ biến, bất chấp những lo ngại về khả năng sử dụng và bộ tính năng phức tạp. Có lẽ nó đáng để học hỏi, nếu chỉ để làm cho bản thân bạn có việc làm hơn; đối thủ cạnh tranh chính của nó trong khoa học tính toán là Fortran và C, cũng đáng để học hỏi.

Bất cứ điều gì bạn quyết định học sẽ dựa trên những gì bạn thực sự cần. Chắc chắn, thật tuyệt khi học cả Python và C ++, nhưng với những hạn chế về thời gian và tài nguyên, có lẽ bạn sẽ chỉ học những gì bạn thực sự cần sử dụng, và điều đó phụ thuộc vào cộng đồng bạn làm việc.


Vì vậy, liên quan đến giới hàn lâm, bạn có nên nói rằng tốt hơn là đầu tư thời gian học Python thay vì C ++?
AlanH

1
Một lần nữa, tất cả phụ thuộc. Tôi vẫn còn nhiều hơn về mặt học thuật và tôi sử dụng Python mọi lúc. Tôi cũng vẫn phải sử dụng C ++ cho công việc được viết bằng ngôn ngữ đó. Ý kiến ​​cá nhân của tôi là việc học Python trước có thể sẽ mang lại kết quả nhanh hơn cho bạn so với khi bạn học C ++ trước, nhưng tôi không biết người xác suất / quy trình ngẫu nhiên / người kết hợp nào sử dụng, do đó số dặm của bạn có thể thay đổi.
Geoff Oxberry

Tôi đồng ý với Geoff rằng học trăn trước tiên là một ý tưởng tốt, vì nó sẽ giúp bạn đi nhanh hơn nhiều. C ++ là một ngôn ngữ tốt, nhưng đường cong học tập cao hơn đáng kể và việc học nó nửa vời là điều tồi tệ hơn nhiều so với việc không học nó.
LKlevin

"C ++ có một đường cong học tập dốc khi nói đến các tính năng nâng cao của nó và tôi đã nghe các báo cáo giai thoại về những người mất nhiều năm để cảm thấy như họ đã học ngôn ngữ đầy đủ". Có, tôi không thể đồng ý nhiều hơn. Tôi nghĩ rằng bất kỳ lập trình viên nào xứng đáng với muối của mình nên học c / c ++ một thời gian trong cuộc sống của anh ấy hoặc cô ấy, nhưng chắc chắn bạn sẽ mất 10000 giờ để thực sự cảm thấy mình là một chuyên gia với họ. +1
James

11

Như Misha và Geoff Oxberry đã chỉ ra, Mathematica thực sự có một trọng tâm khác (chỉ vì bạn có thể giã nát móng tay bằng tuốc nơ vít không có nghĩa là bạn nên làm). Vì vậy, tôi đặt câu hỏi của bạn là "Nếu tôi biết Matlab, tại sao tôi nên học Python?" [Chỉnh sửa: và vì vậy, rõ ràng, đã làm bạn.]

Đối với tất cả ý định và mục đích, Matlab là tiếng Anh của máy tính khoa học - với tất cả các ý nghĩa tích cực và tiêu cực mà sự tương tự này đòi hỏi. Một điểm tốt cụ thể là mã Matlab có thể hữu ích (nghĩa là có thể thực thi cũng như dễ hiểu) đối với nhiều người hơn mã trong bất kỳ ngôn ngữ nào khác. (Đây là lý do chính tôi cung cấp mã Matlab cho tất cả các thuật toán của mình.) Ngoài ra, máy tính để bàn Matlab có thể thực sự hữu ích trong khi tạo mẫu, đặc biệt là khả năng chạy các đoạn mã (ô) trực tiếp từ trình soạn thảo, cũng như trình dựng sẵn trong hồ sơ.

Điều đó đang được nói, nếu bạn muốn học một ngôn ngữ cấp cao khác để giải trí và kiếm lợi nhuận, bạn có thể làm điều tồi tệ hơn Python. Một số lý do ngoài những gì Geoff liệt kê:

  • Giao diện với các chương trình và thư viện bên ngoài trong Python dễ dàng hơn nhiều. Không có tập tin mex nữa!

  • Nếu bạn ở xa máy tính để bàn của bạn, việc tải và chạy Python + NumPy / SciPy sẽ dễ dàng hơn nhiều so với việc truy cập vào giấy phép Matlab.

  • Lý do chính Matlab nhanh hơn NumPy là vì nó gói các thư viện nhà cung cấp được tối ưu hóa cho đại số tuyến tính (MKL, ACML). Có thể ( nếu hơi tẻ nhạt ) để xây dựng NumPy của riêng bạn và liên kết nó với cùng các thư viện để có được hiệu suất gần như (và đa luồng) như Matlab cho đại số tuyến tính, cộng với hiệu suất tốt hơn của Python cho mọi thứ khác. (Mặc dù điều đó tất nhiên đòi hỏi phải có giấy phép ngay cả khi sử dụng cho mục đích học thuật, do đó phủ nhận phần thưởng miễn phí, nhưng vẫn là một lựa chọn thú vị để có cùng mã làm việc với cài đặt tăng tốc do nhà tuyển dụng tài trợ trong văn phòng cũng như ngoài giá cài đặt trên máy tính hoặc máy tính xách tay của bạn.)

  • Trong khi các hộp công cụ của Matlab là một trong những điểm bán hàng của nó, có một vài lĩnh vực mà Python đang ở phía trước; đặc biệt, SymPyFEniCS đã đánh bại các hộp công cụ Symbolic và PDE bằng một lề rộng.

  • Đừng quên phần thú vị (khoảng trắng ngữ nghĩa và ràng buộc tên ): Tôi đã thấy một số đồng nghiệp bị bọ Python cắn và thực sự có một điều gì đó thỏa mãn một cách kỳ lạ khi viết thuật toán của bạn bằng Python không có trong Matlab ( mặc dù đó có thể chỉ là niềm vui của việc học ngoại ngữ) :)

(Nếu bạn bắt đầu với NumPy, bạn có thể thấy trang này hữu ích.)


5

Python có thể thay thế cho cả c ++ và Matlab. Nó được lan truyền tốt trong cả học viện và ngành công nghiệp. Trong công nghiệp đôi khi nó được sử dụng như một chất keo cho các ngôn ngữ cấp thấp hơn, chủ yếu là c / c ++. Mathematica là một câu chuyện hoàn toàn khác. Ưu điểm chính của nó là nơi mà tất cả các đề cập khác (c / c ++; Matlab; Python) không tốt: trong các tính toán tượng trưng.

Vì vậy, cả bốn đều hoàn toàn khác nhau: c ++ đã cũ và ổn định ngôn ngữ lập trình tương đối thấp; Python là ngôn ngữ máy tính cấp cao và mới đang phát triển; Matlab là một môi trường tính toán số với một điểm nhấn mạnh mẽ về đại số vectơ (mặc dù nó có thể làm nhiều hơn hoặc ít hơn mọi thứ); Mathematica là một hệ thống đại số máy tính với điểm nhấn mạnh mẽ về các tính toán tượng trưng (cùng nhận xét như với MATLAB). Vì vậy, họ không phải là đối thủ cạnh tranh.


Thật; Tôi thường bối rối (và đôi khi ngạc nhiên) khi thấy mọi người sử dụng Mathicala cho máy tính khoa học ...
Christian Clason

@ChristianClason và Misha: đó là một quan niệm sai lầm rằng Mathematica chủ yếu là một hệ thống đại số máy tính. Nếu bạn nhìn vào cách mọi người thực sự sử dụng nó , phần lớn nó không phải là đại số tượng trưng và trong một số lĩnh vực số, nó có khả năng cạnh tranh với các công cụ như MATLAB và R. (Cá nhân tôi sẽ chọn Mma trên hai công việc này cho hầu hết các nhiệm vụ xử lý dữ liệu số , nhưng đó tất nhiên là một sở thích cá nhân.) Trong một số lĩnh vực, như tích hợp số hoặc trực quan hóa, nó dường như đi trước MATLAB. Trong những người khác như PDE giải quyết nó phía sau.
Szabolcs

Đối với ai đó chỉ quan tâm đến điện toán số, Python là một thay thế cho MATLAB, một ngôn ngữ tương đối cao, tương tự như khả năng sử dụng các thói quen thư viện để xử lý các tính toán tiêu chuẩn liên quan đến đại số tuyến tính, biến đổi Fourier, các hàm đặc biệt, v.v. Có, Python được áp dụng rộng rãi hơn nhiều, nhưng nó bao gồm mọi thứ bạn có thể làm trong MATLAB.
Brian Borchers

4

Tôi biết câu hỏi của bạn là về việc sử dụng trăn, nhưng bạn nói rằng bạn quan tâm đến "phân tích số hoặc xác suất". Tôi không biết nếu bạn đã xem xét R , nhưng nó được thiết kế dành riêng cho loại công việc này. R là một ngôn ngữ rất mạnh cho xác suất và thống kê, và có một cơ sở người dùng rất lớn và tích cực của các nhà toán học và nhà khoa học.

R khác với Matlab theo nghĩa là nó là nguồn mở, có trọng tâm thống kê và tạo ra một số âm mưu rất ấn tượng (xem ggplot2 ). Bạn có thể làm gần như mọi thứ trong R mà bạn có thể làm trong Matlab, nhưng khía cạnh yêu thích của tôi là sự đóng góp của người dùng. Hầu hết các thư viện đóng góp được viết bởi các nhà khoa học và được công bố trên một tạp chí thống kê. Họ cũng có hướng dẫn bằng văn bản rất tốt (được gọi là tài liệu tham khảo và họa tiết). Thư viện yêu thích mới của tôi cung cấp hỗ trợ CUDA được xây dựng trên các thư viện CULA (miễn phí cho sử dụng học tập). Có tồn tại một số lượng lớn các phương pháp cho lý thuyết xác suất là tốt (xem tại đây ).

Dù sao, R chắc chắn được thiết kế dành riêng cho dòng công việc của bạn, vì vậy hãy kiểm tra và xem xét thêm nó vào bộ công cụ của bạn :) Hãy nhớ rằng, bạn có thể thực thi các tập lệnh R trong Python và các tập lệnh Python trong R, và dễ dàng nắm bắt các đầu ra.

May mắn nhất!


2

Những người khác đã nhận xét dài và sâu hơn tôi sẽ cố gắng ở đây. Tuy nhiên, tôi muốn nhấn mạnh một điểm một lần nữa: nó phụ thuộc vào cộng đồng của bạn. Ví dụ, nếu bạn đang làm việc trong một dự án kỹ thuật điện, rất có thể bạn sẽ sử dụng MATLAB; điều tương tự cũng có thể đúng nếu bạn là một nhà phân tích số muốn xác minh ước tính tỷ lệ hội tụ của bạn cho một vấn đề mô hình đơn giản.

Mặt khác, nếu bạn thích máy tính khoa học (ví dụ, mô phỏng dòng chảy xung quanh máy bay, mô phỏng phản ứng tổng hợp hạt nhân trong plasma, mô phỏng sự đối lưu trong lớp phủ trái đất) hoặc phát triển các phương pháp số với các ứng dụng như vậy, sau đó là lingua tiếng Pháp là C ++. Mỗi gói máy tính khoa học quy mô lớn ngày nay được viết bằng C ++ (hoặc C), tốt hơn hoặc xấu hơn, và đây là cách nó sẽ tồn tại trong một thời gian dài sắp tới. Để chỉ nêu một vài ví dụ, PETSc và các gói Trilinos cực kỳ lớn và đa dạng được viết bằng C và C ++, tương ứng. Trong số các thư viện phần tử hữu hạn nguồn mở lớn mà tôi có thể nghĩ đến (libMesh, deal.II, oofem, freefem), mỗi thư viện đều được viết bằng C ++. Trong số các chương trình trực quan hóa, hai chương trình lớn nhất (Visit và Paraview) được viết bằng C ++. Tôi có thể mở rộng danh sách.

Vấn đề là nếu bạn hài lòng với các mô phỏng quy mô nhỏ, mọi người sử dụng một ngôn ngữ, nhưng bất cứ khi nào nói đến tính toán nghiêm túc, có thể song song, tất cả đều sử dụng một ngôn ngữ khác. Đó là một điều cộng đồng chắc chắn, nhưng cũng có thể tương thích - nếu PETSc và Trilinos được viết bằng C và C ++, thì tôi (là tác giả của thỏa thuận.II) không thể dễ dàng chọn bất kỳ ngôn ngữ nào khác ngay cả khi tôi muốn Tôi cần làm việc với PETSc và Trilinos.


1
Công bằng mà nói, có rất nhiều người dùng PETSc đến từ Fortran và một số ít từ Python. C rất dễ gọi từ hầu hết mọi ngôn ngữ, mặc dù lập trình ngôn ngữ hỗn hợp đi kèm với những thách thức riêng và tôi không khuyên bạn nên thường xuyên sử dụng nó. Vấn đề về vị trí trong ngăn xếp mà mã của bạn cư trú cũng quá thường xuyên bị bỏ qua. Các ứng dụng của người dùng cuối nên đưa ra các lựa chọn thiết kế phần mềm khác với các thư viện cấp hệ thống chẳng hạn.
Jed Brown

Điều đó công bằng. Nhưng tuy nhiên, sự thật là các phiên bản phần mềm gần đây được sử dụng trong các tính toán quy mô lớn được viết quá nhiều bằng C và C ++ ngày nay (phần cũ hơn được viết bằng Fortran mặc dù không hiểu).
Wolfgang Bangerth

1

Để thêm hai xu của tôi, tôi đã có cả kinh nghiệm học tập gần đây (bằng tiến sĩ mới :)) và kinh nghiệm trong ngành (một nhà sản xuất thiết bị khảo sát).

Chúng tôi thực hiện nhiều tính toán số trên các bộ xử lý nhúng yếu (nghĩ rằng bộ xử lý điện thoại di động). Ngoài việc không có MATLAB cho ARM, C ++ là vua trong thế giới này - nhiều bộ trình biên dịch nhúng không bao gồm FORTAN!

Mặc dù chúng tôi có số lượng giấy phép MATLAB hạn chế, nhưng yêu cầu tạo ra một sản phẩm vẽ 2 Watts sức mạnh làm cho công việc phát triển của chúng tôi có lợi cho C ++, (thử nghiệm sang một bên).

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.