Sống sót MATLAB và R với tư cách là một lập trình viên Hardcore [đã đóng]


25

Tôi thích lập trình bằng các ngôn ngữ dường như hướng đến các lập trình viên khó tính. (Sở thích của tôi là Python và D.) MATLAB hướng đến các kỹ sư và R hướng đến các nhà thống kê, và có vẻ như những ngôn ngữ này được thiết kế cho những người không phải là lập trình viên khó tính và không nghĩ như những lập trình viên khó tính. Tôi luôn thấy chúng hơi khó sử dụng, và ở một mức độ nào đó tôi không thể đặt ngón tay của mình vào lý do. Dưới đây là một số vấn đề tôi đã quản lý để xác định:

  • (Cả hai): Sự nhấn mạnh cực độ vào các vectơ và ma trận đến mức không có nguyên thủy thực sự.
  • (Cả hai): Khó khăn của thao tác chuỗi cơ bản.
  • (Cả hai): Thiếu hoặc lúng túng trong việc hỗ trợ các cấu trúc dữ liệu cơ bản như bảng băm và "thực", tức là kiểu tham số loại và lồng nhau, mảng.
  • (Cả hai): Chúng thực sự, thực sự rất chậm ngay cả khi được giải thích các tiêu chuẩn ngôn ngữ, trừ khi bạn cúi xuống để vector hóa mã của mình.
  • (Cả hai): Chúng dường như không được thiết kế để tương tác với thế giới bên ngoài. Ví dụ, cả hai đều là những chương trình khá cồng kềnh, phải mất một thời gian để khởi chạy và dường như không được thiết kế để làm cho các chương trình lọc văn bản đơn giản dễ viết. Hơn nữa, việc thiếu xử lý chuỗi tốt làm cho I / O tệp ở bất cứ thứ gì ngoại trừ các dạng rất chuẩn gần như không thể.
  • (Cả hai): Hướng đối tượng dường như có cảm giác rất chắc chắn. Có, bạn có thể làm điều đó, nhưng nó không cảm thấy thành ngữ hơn nhiều so với OO trong C.
  • (Cả hai): Không có cách rõ ràng, đơn giản để có được một loại tham chiếu. Không có con trỏ hoặc tham chiếu lớp. Ví dụ, tôi không biết làm thế nào bạn cuộn danh sách liên kết của riêng bạn bằng một trong hai ngôn ngữ này.
  • (MATLAB): Bạn không thể đặt nhiều hàm cấp cao nhất trong một tệp, khuyến khích các hàm rất dài và mã hóa cắt và dán.
  • (MATLAB): Các số nguyên dường như không tồn tại như một loại lớp đầu tiên.
  • (R): Các cấu trúc dữ liệu dựng sẵn cơ bản dường như ở mức quá cao và tài liệu kém, và dường như không bao giờ thực hiện được những gì tôi mong đợi với kinh nghiệm của tôi với các cấu trúc dữ liệu tương tự nhưng ở mức thấp hơn.
  • (R): Tài liệu được trải rộng khắp nơi và hầu như không thể duyệt hoặc tìm kiếm. Ngay cả D, thường bị đánh gục vì tài liệu tồi và vẫn còn khá alpha-ish, về cơ bản là tốt hơn nhiều như tôi có thể nói.
  • (R): Ít nhất là theo như tôi biết, không có IDE tốt cho nó. Một lần nữa, ngay cả D, một ngôn ngữ khá alpha với một cộng đồng nhỏ, sẽ tốt hơn.

Nói chung, tôi cũng cảm thấy như MATLAB và R có thể dễ dàng được thay thế bằng các thư viện cũ đơn giản bằng các ngôn ngữ có mục đích chung hơn, nếu có đủ các thư viện toàn diện. Điều này đặc biệt đúng trong các ngôn ngữ mục đích chung mới hơn bao gồm nhiều tính năng cho các nhà văn thư viện.

Tại sao R và MATLAB có vẻ kỳ lạ với tôi? Có bất kỳ vấn đề lớn nào khác mà bạn nhận thấy có thể khiến những ngôn ngữ này trở nên xa lạ với các lập trình viên khó tính không? Khi việc sử dụng của họ là cần thiết, một số mẹo sống sót tốt là gì?

Chỉnh sửa: Tôi đang thấy một vấn đề từ một số câu trả lời tôi đã nhận được. Tôi có một sở thích cá nhân mạnh mẽ, khi tôi phân tích dữ liệu, để có một tập lệnh kết hợp toàn bộ đường ống dẫn. Điều này ngụ ý rằng một ngôn ngữ mục đích chung cần được sử dụng. Tôi ghét phải viết một tập lệnh để "dọn sạch" dữ liệu và nhổ nó ra, sau đó một tập lệnh khác để đọc lại trong một môi trường hoàn toàn khác, v.v. Tôi thấy ma sát khi sử dụng MATLAB / R cho một số công việc của tôi và hoàn toàn ngôn ngữ khác với không gian địa chỉ hoàn toàn khác biệt và cách suy nghĩ cho phần còn lại là một nguồn ma sát khổng lồ. Hơn nữa, tôi biết có những lớp keo tồn tại, nhưng chúng dường như luôn phức tạp khủng khiếp và là một nguồn ma sát.


40
python được viết cho các lập trình viên "Hardcore" bây giờ? điều đó xảy ra khi nào
TZHX

3
@TZHX: Ok, vậy có lẽ Hardcore là từ sai. Một cụm từ tốt hơn sẽ là "những người lập trình và suy nghĩ như lập trình viên."
dsimcha

17
Tôi thực sự không thích thuật ngữ "lập trình viên khó tính". Nghe có vẻ như một số hình thức của tinh hoa, và thuật ngữ "lập trình viên mục đích chung" sẽ chỉ được sử dụng để đưa ra quan điểm tương tự.
blubb

5
Bạn đang phàn nàn rằng R và Matlab không dành cho các lập trình viên khó tính, nhưng những phàn nàn của bạn dường như không đủ mạnh để sử dụng R và Matlab. Nếu bạn muốn viết bằng ngôn ngữ không phải từ gia đình Algol, bạn phải suy nghĩ theo thuật ngữ của nó.
Peter Taylor

5
Gee, ngôn ngữ lập trình thứ 2 của tôi là hội. Lõi không khó Python - đó là trên một cách chính xác mức độ tương tự như R và Matlab. Giả sử nó khác biệt là không hiểu nhiều về Python ... Python là tuyệt vời cho lập trình mục đích chung. Matlab là tuyệt vời vì rất nhiều thứ Mathworks làm cho dễ dàng. R là tuyệt vời vì các công cụ thống kê, học máy, chuẩn bị dữ liệu, phân tích và trực quan hóa có sẵn (hay còn gọi là thống kê). Perl's b / c tuyệt vời ... Cứ làm như tôi - tìm hiểu tất cả trong số họ và chọn đúng cho công việc. :)
Iterator

Câu trả lời:


29

Có lẽ là một ý tưởng tồi để tiếp cận các ngôn ngữ cụ thể trong miền với tư duy cần thiết cho lập trình nói chung là hoặc để lập trình các chương trình chung với các ngôn ngữ có mục đích chung. Là miền cụ thể, họ có thể sẽ yêu cầu một đường cong học tập dốc hơn và một tâm trí không thoải mái để được sử dụng hiệu quả nhất. Tôi xem xét việc viết mã trong Matlab tương đương với việc viết mã cụ thể theo miền, được tối ưu hóa cao (ví dụ, bằng cách viết mã OpenGL hiệu quả và sạch sẽ). Tôi cũng đã thấy chúng ngày càng chuyển sang việc trở nên hữu ích khi các thư viện được sử dụng trong các ngôn ngữ khác - xem, ví dụ: http://www.mathworks.com/matlabcentral/fileexchange/12987-integrating-matlab-with-c

Tôi có thể nói, hãy sử dụng quy trình tương tự cho các DSL này như với bất kỳ ai khác:

  • Chọn cẩn thận các vấn đề mà bạn đang giải quyết bằng Matlab hoặc R, để đảm bảo rằng chúng chính xác là các loại vấn đề mà chúng giải quyết tốt nhất. Ví dụ: sử dụng Matlab để thao tác các vectơ của bạn chứ không phải cho phần còn lại của công việc, nếu bạn có thể tránh nó
  • Nói chung, trộn / khớp giải pháp để hạn chế các phần mà bạn lập trình trong Matlab hoặc R thành tập hợp con chính xác của vấn đề mà chúng được xây dựng để xử lý.
  • Theo suy nghĩ của một người dùng thông thường trong miền mà các ngôn ngữ được xây dựng cho, khi thiết kế và xây dựng giải pháp của bạn - điều chỉnh thái độ toán học véc tơ đối với thế giới trước khi bắt đầu làm việc với chương trình Matlab; có thể viết lên công việc của bạn trên giấy, sử dụng ký hiệu toán học tiêu chuẩn, trước tiên
  • Làm thêm công việc cần thiết để xây dựng cho mình một môi trường làm việc thoải mái và có được các công cụ cần thiết để thực hiện công việc, ngay cả khi khác với tiêu chuẩn cho DSL. Ví dụ: nếu bạn là người dùng emacs, hãy cân nhắc sử dụng chế độ MATLAB để emacs thực hiện công việc của bạn; đảm bảo nó hoạt động tốt như các chế độ bạn đã thiết lập cho các ngôn ngữ khác
  • Hãy sẵn sàng để chuyển ra ngoài. Đặc biệt, nếu bạn phải thường xuyên quay lại ngôn ngữ, hãy đảm bảo xây dựng cho mình một hệ sinh thái đáng tin cậy, nơi công việc bạn làm trong DSL được chứa trong công việc cụ thể của miền, chỉ và việc chuyển sang ngôn ngữ khác là dễ dàng nhất có thể phần còn lại của công việc của bạn. Nhắc nhở bản thân, thường xuyên hơn bình thường, để tìm cách thực hiện công việc cụ thể không phải DSL trong các hệ thống khác

3
Những gì bạn nói có ý nghĩa hoàn hảo và thường là cách tôi làm mọi thứ khi tôi phải sử dụng Matlab hoặc R. Phần bực bội của điều này là ma sát gây ra bởi việc phải tích hợp nhiều ngôn ngữ với nhiều cách làm và nhiều không gian địa chỉ. Thông thường, điều này liên quan đến việc đổ mọi thứ vào các tệp văn bản tại các điểm dường như tùy ý và đọc lại hoặc sử dụng một số lớp keo dễ vỡ, xấu xí, khó cấu hình.
dsimcha

25

Tôi sẽ mở đầu điều này bằng cách lưu ý rằng tôi quen thuộc với MATLAB, nhưng không phải R.

Lý do MATLAB không hoạt động tốt với OO, xử lý chuỗi hoặc cấu trúc dữ liệu tùy chỉnh là vì nó không có nghĩa là làm những việc đó. Có rất nhiều ngôn ngữ cho OO, rất nhiều ngôn ngữ làm tốt công việc xử lý chuỗi và nhiều ngôn ngữ khác hỗ trợ các kiểu dữ liệu tùy chỉnh điên rồ. Không ai trong số họ giỏi nhân ma trận, vì họ không được thiết kế cho nó.

Chỉ cần tối ưu hóa các hoạt động vectơ và ma trận mà MATLAB thực hiện là đủ khó mà không phải xử lý các loại hoặc con trỏ do người dùng xác định hoặc không (nếu không khó, họ sẽ không thể tính phí quá nhiều cho nó). Việc thêm hỗ trợ vectơ nhanh cho các ngôn ngữ có mục đích chung hiện tại cũng khó thực hiện --- nó thêm một chi phí lớn cho một tính năng mà ít lập trình viên sẽ sử dụng (quá ít lập trình viên hiểu danh sách được liên kết, họ dự kiến ​​sẽ sử dụng phân tách eigenvalue như thế nào? ).

MATLAB rất xa lạ với bạn vì nó được thiết kế để cho phép các nhà khoa học và kỹ sư thực hiện phép nhân ma trận và tính toán ODE rất nhanh. MATLAB không đo lường theo định nghĩa của bạn về một ngôn ngữ "khó tính" bởi vì nó không bao giờ được sử dụng. Cố gắng nghĩ về MATLAB theo Python hoặc D cũng giống như cố gắng nghĩ về LISP hoặc Haskell theo C hoặc về Verilog và VHDL theo JavaScript --- họ giải quyết các vấn đề khác nhau và tiếp cận giải quyết vấn đề theo những cách hoàn toàn khác nhau. Công bằng mà nói, MATLAB đã đưa ra một số (được, rất nhiều) sự lựa chọn thiết kế ngôn ngữ kỳ quái mà tôi không thể nào không nghĩ tới, ngay cả từ quan điểm của một ngôn ngữ cụ thể theo tên miền. Nhưng không có lý do cụ thể tại sao một nhà thiên văn học nên quan tâm rằng thiên thể X cách chính xác 48 AU so với thiên thể Y trái ngược với 48,0 AU.

Bây giờ, rất may, một số thư viện đang xuất hiện đúng như bạn đề xuất: hỗ trợ tốt cho tính toán khoa học trong một ngôn ngữ có mục đích chung. Đối với Python, NumPy / Matplotlib có một số cạnh thô nhưng mặt khác cung cấp chức năng MATLAB hợp lý bên trong Python. Lý do chưa có dự án nào khác như thế này là các thư viện cực kỳ khó viết và phục vụ một thị trường đã được MATLAB và FORTRAN bảo vệ.

Nếu bạn hoàn toàn phải sử dụng MATLAB hoặc R, bạn không thể tiếp cận lập trình trong chúng như một lập trình viên "khó tính", bạn phải tiếp cận nó như một nhà khoa học hoặc kỹ sư "khó tính". Đối với LISP, bạn suy nghĩ đệ quy. Trong MATLAB, bạn chỉ cần suy nghĩ trong ma trận. Nhấn mạnh vào đại số tuyến tính ( bài giảng của MIT về chủ đề này là một đánh giá tuyệt vời). Mặt khác, cách duy nhất để "sống sót" MATLAB là thực hành để nhận biết khi nào một vòng lặp có thể được thay thế bằng thao tác vectơ hoặc khi vấn đề của bạn giảm xuống để tìm giá trị riêng của sản phẩm bên ngoài.


Có, tổng thể tôi yêu Numpy / Scipy / Matplotlib và sử dụng chúng bất cứ khi nào sự thay thế rõ ràng sẽ là MATLAB / R. Tôi chỉ phàn nàn về những điều này là chúng không sâu bằng MATLAB / R và vì chúng là Python nên chúng vẫn hơi chậm.
dsimcha

4
@dsimcha, điều này thực tế không chính xác . Trong nghiên cứu hiệu suất này, Numpy ngang tầm với MATLAB và Pyrex cũng nằm trong hệ số 2 của C ++.
wvoq

@wvoq: Làm rõ: Ý tôi là trình thông dịch Python chậm chứ không phải Numpy. Tôi biết Numpy chủ yếu là một trình bao bọc cho BLAS và LAPACK, rất nhanh. Tất nhiên vẫn còn chi phí cố định để gọi mã này. Tôi cũng biết về Pyrex, Cython, v.v. và họ giúp đỡ, nhưng bạn vẫn pha trộn các ngôn ngữ ở mức độ chi tiết và đây vẫn có thể là một nguồn ma sát.
dsimcha

2
@dsimcha, Chi phí gọi Numpy thực tế là một hằng số. Trong nghiên cứu hiệu suất tôi đã đề cập, bạn đạt được một phần mười giây với C ++. Thời gian đó phải được so sánh với thời gian dành cho việc viết và gỡ lỗi, và gỡ lỗi các cuộc gọi BLAS tại đó. Nó có thể được hướng dẫn để hỏi tại sao không viết tất cả mọi thứ trong hội đồng? Hoặc thậm chí mã máy thẳng, vì việc chuyển đổi từ lắp ráp sang mã máy thêm một số chi phí cố định?
wvoq

3
@dsimcha Hả? Bạn muốn làm mọi thứ trong một ngôn ngữ (nhanh), bạn thích Python nhất và sau đó bạn phàn nàn về việc Python bị chậm? Vì vậy, những gì toàn bộ điểm. Tôi đoán bạn chỉ muốn MATLAB có các tính năng mục đích chung hơn và nhanh hơn ngôn ngữ được dịch?
Chris nói Phục hồi lại

14

Việc bạn lặp đi lặp lại việc sử dụng thuật ngữ "lập trình viên khó tính" để chỉ chính mình. cùng với sự khẳng định của bạn rằng các nhà thiết kế của R và MATLAB thì không , đánh tôi là rất ngớ ngẩn và khuyến khích mọi người đừng coi trọng những lời chỉ trích của bạn.

Nếu bạn muốn đọc một số lời chỉ trích nghiêm túc về R, bạn sẽ làm tốt khi đọc tác phẩm này của Ross Ihaka, một trong những nhà thiết kế của R. Đối với tôi, thiết kế R dường như khó hơn đáng kể so với sử dụng D hoặc Python.


2
-1. Tôi không bao giờ có ý ám chỉ rằng các nhà thiết kế MATLAB và R là bất cứ thứ gì khác ngoài những lập trình viên rất giỏi, khó tính. Tuy nhiên, MATLAB và R không được thiết kế cho các lập trình viên khó tính.
dsimcha

3
"... có vẻ như những ngôn ngữ này được thiết kế bởi những người không phải là lập trình viên khó tính và không nghĩ như những lập trình viên khó tính."
wvoq

6
Bạn vẫn chưa làm rõ "lập trình viên khó tính" là gì. Theo ví dụ của bạn, "Hardcore" nghe có vẻ như chỉ "thoải mái nhất với C ++", trong trường hợp R và MATLAB sẽ không khó tính theo định nghĩa. Hầu như tất cả các ví dụ của bạn giảm bớt khiếu nại rằng các ngôn ngữ này không phải là những gì bạn đã quen, mà không hỏi tại sao các chuyên gia trong các lĩnh vực này thấy phù hợp để thực hiện chúng theo cách đó.
wvoq

1
Ngoài ra, về mặt định nghĩa, tôi nghĩ điều đó là hiển nhiên, nhưng một "lập trình viên khó tính" chỉ là người thoải mái với các khái niệm lập trình cơ bản như tham chiếu / con trỏ, hướng đối tượng, hàm lambda, cấu trúc dữ liệu cơ bản, v.v. và được sử dụng để phát triển trong một ngôn ngữ có mục đích chung.
dsimcha

2
Đầu tiên, "Hardcore" là một thuật ngữ được tải khá nhiều nếu có ý định biểu thị "ai đó nói chuyện với các khái niệm cơ bản trong lập trình oo / thủ tục / chức năng". Thứ hai, tôi không thể nói cho MATLAB, nhưng R có tất cả những điều này. Sự khác biệt duy nhất là trong R, bạn được ngôn ngữ khuyến khích giải quyết vấn đề của bạn theo cách các yếu tố của từ vựng thống kê trở thành nguyên thủy của bạn. Lý do cho điều này là các nhà thống kê và những người học máy thường làm việc với các vấn đề dễ dàng diễn đạt theo cách này, điều này làm cho R trở nên phù hợp tự nhiên ngay cả khi bạn cảm thấy thoải mái với những thứ "cốt lõi cứng hơn".
wvoq

9

Sự nhấn mạnh cực độ vào các vectơ và ma trận đến mức không có nguyên thủy thực sự.

Nó phụ thuộc vào những gì bạn gọi là một nguyên thủy thực sự. Trong R, một vectơ là một nguyên thủy thực sự; đó là tất cả các biến là vectơ. Tương tự như vậy, trong MATLAB tất cả các biến là ma trận.

Những khó khăn của thao tác chuỗi cơ bản.

Trong MATLAB, thao tác chuỗi là mạnh mẽ nhưng tôi đồng ý rằng mã thường xấu và không trực quan (ít nhất là bây giờ). Đối với R, có stringrgói, sử dụng tốt như các công cụ trong bất kỳ ngôn ngữ nào khác.

Thiếu hoặc lúng túng trong việc hỗ trợ các cấu trúc dữ liệu cơ bản như bảng băm và "thực", tức là kiểu tham số và lồng nhau, mảng.

Trong R, vectơ có tên hoạt động giống như hàm băm. Ngoài ra còn có hashfilehashcác gói. Không chắc chắn về việc triển khai MATLAB, nhưng bạn có thể gọi các phiên bản JAVA hoặc .NET một cách dễ dàng nếu bạn muốn.

Chúng thực sự, thực sự rất chậm ngay cả khi được giải thích các tiêu chuẩn ngôn ngữ, trừ khi bạn cúi xuống để vector hóa mã của mình.

Khi bạn hiểu rõ về véc tơ hóa (tôi chắc chắn bạn sẽ làm được, nếu bạn thực sự khó tính), bạn sẽ nguyền rủa phải sử dụng các vòng lặp khi bạn quay lại các ngôn ngữ khác. Tốc độ thực hiện là một sự đánh đổi cho tốc độ lập trình.

Chúng dường như không được thiết kế để tương tác với thế giới bên ngoài. Ví dụ, cả hai đều là những chương trình khá cồng kềnh, phải mất một thời gian để khởi chạy và dường như không được thiết kế để làm cho các chương trình lọc văn bản đơn giản dễ viết. Hơn nữa, việc thiếu xử lý chuỗi tốt làm cho I / O tệp ở bất cứ thứ gì ngoại trừ các dạng rất chuẩn gần như không thể.

Cả hai đều có thể đọc và ghi dữ liệu ở bất kỳ định dạng nào. Cả hai đều có thể được gọi từ hầu hết các ngôn ngữ lập trình khác. Hoặc từ một dấu nhắc lệnh. Bạn có thể tạo GUI với chúng. Làm thế nào mà không tương tác với thế giới bên ngoài? Nếu bạn đang vật lộn với chương trình lọc văn bản của mình, hãy hỏi về stackoverflow.

Hướng đối tượng dường như có một cảm giác rất bắt vít. Có, bạn có thể làm điều đó, nhưng nó không cảm thấy thành ngữ hơn nhiều so với OO trong C.

Đã đồng ý; chúng chủ yếu là ngôn ngữ thủ tục.

Không có cách rõ ràng, đơn giản để có được một loại tham chiếu. Không có con trỏ hoặc tham chiếu lớp. Ví dụ, tôi không biết làm thế nào bạn cuộn danh sách liên kết của riêng bạn bằng một trong hai ngôn ngữ này.

Đồng ý trong R. Trong MATLAB, các tham chiếu được gọi là các thẻ điều khiển.

Bạn không thể đặt nhiều hàm cấp cao nhất trong một tệp, khuyến khích các hàm rất dài và mã hóa cắt và dán.

Vô lý. Chỉ cần tạo nhiều tập tin.

Số nguyên dường như không tồn tại như một loại hạng nhất.

Họ làm. Xem int8, int16, int32int64.

Các cấu trúc dữ liệu dựng sẵn cơ bản dường như ở mức quá cao và tài liệu kém, và dường như không bao giờ thực hiện được những gì tôi mong đợi với kinh nghiệm của tôi với các cấu trúc dữ liệu tương tự nhưng ở mức thấp hơn.

Họ phù hợp để làm phân tích dữ liệu. Xin cho ví dụ cụ thể về hành vi bất ngờ.

Các tài liệu được trải rộng khắp nơi và hầu như không thể duyệt hoặc tìm kiếm. Ngay cả D, thường bị đánh gục vì tài liệu tồi và vẫn còn khá alpha-ish, về cơ bản là tốt hơn nhiều như tôi có thể nói.

Có nhiều loại tài liệu. Bắt đầu với ?some_function, RSiteSearch('some concept'), rseek.org , và các sosgói. Chưa kể các hướng dẫn đi kèm với cài đặt. Hoặc một cuốn sách hay .

Ít nhất là theo như tôi biết, không có IDE tốt cho nó. Một lần nữa, ngay cả D, một ngôn ngữ khá alpha với một cộng đồng nhỏ, sẽ tốt hơn.

Hãy thử Architect hoặc RStudio hoặc IDE của Analytics Analytics. Xem phần "IDE và trình soạn thảo cho R" của trang thông tin Stack Overflow để biết các liên kết và nhiều tùy chọn hơn.


3

MATLAB có thể tích hợp với Java và C / C ++. Bạn có thể thực hiện tất cả khối lượng công việc không phải bằng số của mình bằng các ngôn ngữ này và gọi chúng từ MATLAB.

việc sử dụng chúng là cần thiết

Có một lý do tại sao nó là cần thiết? Bạn đang làm việc trên một cơ sở mã MATLAB hiện có được viết bởi người khác? Có phải là một yêu cầu công việc? (hoặc yêu cầu lớp học nếu bạn đang ở trường) Nếu không, bạn có thể cân nhắc sử dụng SciPy hoặc NumPy thay thế.

Thật không may, theo ý kiến ​​cá nhân của tôi, nếu tình huống này bị ép buộc vào một ai đó, nó không phải lúc nào cũng có thể sống sót. Ngay cả ở trường đại học, không phải mọi sinh viên kỹ thuật đều có thể quen với cách suy nghĩ tính toán MATLAB.


2
Tôi biết các giải pháp này, nhưng chúng có vẻ khá lạc hậu. Tôi muốn gọi MATLAB từ C ++, Java, v.v., không phải cách khác. Tôi muốn mọi thứ trừ MATLAB là ngôn ngữ "trình điều khiển" của tôi.
dsimcha

2
@dsimcha bạn có thể gọi thư viện MATLAB và R từ C. Xem mathworks.com/help/techdoc/matlab_external/f38569.html hoặc math.univ-montp2.fr/~pudlo/R_files/call_R.pdf
Charles E. Grant

0

Tôi làm việc với MATLAB, Python và C (và đôi khi là C ++) và tôi coi mình là (chủ yếu) là nhà phát triển phần mềm, ngồi đối diện với các đồng nghiệp có xu hướng trở thành nhà khoa học dữ liệu, nhà toán học hoặc chuyên gia tên miền khác.

Mặc dù tôi sẽ là người đầu tiên thừa nhận rằng đó không phải là ngôn ngữ lập trình có mục đích chung theo nghĩa là C hoặc Python, nhưng tôi thực sự thích viết kịch bản trong MATLAB hơn rất nhiều, đặc biệt là cho những thứ như phân tích chuỗi thời gian hoặc xử lý hình ảnh.

Có một số tính năng của ngôn ngữ, mặc dù thường được triển khai khá kém hiệu quả, là một niềm vui khi sử dụng. Ví dụ: lấy chỉ mục logic: Tôi có thể tạo một vectơ hoặc ma trận logic chọn vùng quan tâm và đặt tên là "isInROI", thực hiện thao tác lọc để chọn các phần tử từ "dữ liệu" của vectơ hoặc ma trận trong vùng đó là sau đó chỉ đơn giản là vấn đề viết: "roiData = data (isInROI)".

Chính những khoảnh khắc như thế này thực sự khiến tôi đánh giá cao MATLAB và cho phép tôi bỏ qua những tội lỗi khác, rất nhiều và được thảo luận nhiều.


Lưu ý rằng numpy cũng có lập chỉ mục logic: docs.scipy.org/doc/numpy/user/ mẹo
jarondl 17/214
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.