Julia: Nắm bắt cách thức nó đã được thực hiện


19

Tôi đã bắt gặp một câu hỏi năm 2012 có một cuộc thảo luận rất tốt về Julia như là một thay thế cho R / Python cho các loại Công việc thống kê khác nhau.

Đây là câu hỏi ban đầu từ năm 2012 về lời hứa của Julia

Thật không may, lúc đó Julia rất mới và bộ công cụ cần thiết cho công việc thống kê có phần nguyên thủy. Lỗi đã được giải quyết. Phân phối rất khó cài đặt. Vân vân.

Ai đó đã có một nhận xét rất thích hợp về câu hỏi đó:

Điều này nói rằng, sẽ là 5 năm trước khi câu hỏi này có thể được trả lời trong nhận thức muộn màng. Ngay bây giờ, Julia thiếu các khía cạnh quan trọng sau đây của một hệ thống lập trình thống kê có thể cạnh tranh với R cho người dùng hàng ngày:

Đó là vào năm 2012. Bây giờ là năm 2015 và ba năm đã trôi qua, tôi đã tự hỏi mọi người nghĩ Julia đã làm như thế nào?

Có một cơ thể giàu kinh nghiệm hơn với chính ngôn ngữ & hệ sinh thái Julia nói chung không? Tôi rất thích biết.

Đặc biệt:

  1. Bạn có thể khuyên bất kỳ người dùng mới nào của các công cụ thống kê học Julia trên R không?
  2. Loại trường hợp sử dụng Thống kê nào bạn muốn khuyên ai đó sử dụng Julia trong?
  3. Nếu R chậm ở một nhiệm vụ nhất định, có nghĩa là chuyển sang Julia hoặc Python không?

Lưu ý: Đăng lần đầu ngày 14 tháng 6 năm 2015.


2
Tôi đã xem xét gần đây và không ấn tượng với độ sâu của các gói thống kê của họ. Nếu tôi không nhầm, Python cũng được giải thích, do đó sẽ có những hạn chế tương tự như R. Sự hấp dẫn của Julia khi tôi hiểu đó là lời hứa về tốc độ thêm và khả năng tiếp cận song song tốt hơn.
DWin

3
Tôi nghĩ vấn đề với Julia là SciPy tiếp tục tốt hơn, và bây giờ chúng tôi cũng có Torch trong hỗn hợp. Không ai muốn học một ngôn ngữ điện toán khoa học thứ ba (hoặc thứ tư hoặc thứ năm), ngay cả khi nó nhanh và có các tính năng quá tải chức năng tuyệt vời.
Shadowtalker

4
Julia là một ngôn ngữ được thiết kế tốt, đẹp, nhưng theo tôi nó đã đến quá muộn. Các tàu tính toán ma trận một nút đã qua từ lâu. Julia về cơ bản là Fortran 2.0, với một số tính năng hay, nhưng khi chúng ta chuyển đổi ngày càng nhiều sang điện toán đám mây, nó có rất ít để cung cấp các ngôn ngữ chức năng như Scala, Clojure và thậm chí cả Python. Nếu Julia ở trong tình trạng hiện tại 10 năm trước, nó có thể là một thành công lớn.
Marc Claesen

2
Python và Rcpp đang thực sự phát triển năng động, R ngày càng được chú ý nhiều hơn (R Consortium, Microsoft, v.v.) nên dường như rất khó để Julia bắt kịp ...
Tim

1
Tôi đã không thấy trường hợp kinh doanh cho Julia, và vẫn không. Có vẻ như một nỗ lực dư thừa của các lập trình viên để xây dựng lại một cái gì đó đã tồn tại.
Aksakal

Câu trả lời:


15

Tôi đã chuyển sang Julia, và đây là những lý do thực tế của tôi:

  • Nó keo mã thực sự tốt. Tôi có rất nhiều mã kế thừa trong MATLAB và MATLAB.jl mất 5 phút để cài đặt, hoạt động hoàn hảo và có một cú pháp ngắn gọn giúp sử dụng các hàm MATLAB một cách tự nhiên. Julia cũng có cùng loại với R, Python, C, Fortran và nhiều ngôn ngữ khác.
  • Julia làm song song thực sự tốt. Tôi không chỉ nói về song song nhiều bộ xử lý (bộ nhớ chia sẻ), mà còn là song song đa nút. Tôi có quyền truy cập vào các nút HPC không được sử dụng quá thường xuyên vì mỗi nút khá chậm, vì vậy tôi quyết định thử Julia. Tôi đã thêm @pool vào một vòng lặp, khởi động nó bằng cách cho nó biết tập tin máy và bam nó đã sử dụng tất cả 5 nút. Hãy thử làm điều đó trong R / Python. Trong MPI, sẽ mất một lúc để nó hoạt động (và đó là khi biết bạn đang làm gì), không phải vài phút trong lần đầu tiên bạn thử nó!
  • Việc vector hóa của Julia rất nhanh (trong nhiều trường hợp nhanh hơn bất kỳ ngôn ngữ cấp cao nào khác) và mã bị sai lệch của nó gần như là C nhanh. Vì vậy, nếu bạn viết các thuật toán khoa học, thông thường trước tiên bạn viết nó bằng MATLAB và sau đó viết lại bằng C. Julia cho phép bạn viết nó một lần, sau đó cung cấp cho nó mã trình biên dịch và 5 phút sau nó sẽ nhanh. Ngay cả khi bạn không, điều này có nghĩa là bạn chỉ cần viết mã theo bất kỳ cách nào cảm thấy tự nhiên và nó sẽ chạy tốt. Trong R / Python, đôi khi bạn phải suy nghĩ khá khó khăn để có được một phiên bản vector hóa tốt (điều đó có thể khó hiểu sau này).
  • Các siêu lập trình là tuyệt vời. Hãy nghĩ về số lần bạn đã từng như "Tôi ước tôi có thể ______ bằng ngôn ngữ". Viết một macro cho nó. Thông thường ai đó đã có.
  • Mọi thứ đều có trên Github. Mã nguồn. Các kiện hàng. Siêu dễ dàng để đọc mã, báo cáo vấn đề cho các nhà phát triển, nói chuyện với họ để tìm ra cách làm một cái gì đó, hoặc thậm chí tự cải thiện các gói.
  • Họ có một số thư viện thực sự tốt. Để thống kê, có lẽ bạn sẽ quan tâm đến các gói tối ưu hóa của họ (JuliaOpt là một nhóm quản lý chúng). Các gói số đã là đỉnh cao và chỉ cải thiện.

Điều đó nói rằng, tôi vẫn thực sự yêu Rstudio, nhưng Juno mới trên Atom thực sự rất hay. Khi nó không còn phát triển mạnh và ổn định, tôi có thể thấy nó tốt hơn Rstudio vì tính dễ sử dụng của plugin (ví dụ: nó có một plugin tốt để thích ứng với màn hình hidpi). Vì vậy, tôi nghĩ rằng Julia là một ngôn ngữ tốt để học bây giờ. Nó đã làm việc tốt cho tôi cho đến nay. YMMV.


Bạn có nhớ cập nhật câu trả lời này vì đã hơn 3 năm trôi qua?
Bayequentist

1
Tôi đã đưa ra một phản hồi cập nhật ở đây: scicomp.stackexchange.com/questions/10922/iêu . Có lẽ điều đó nên được sao chép qua.
Chris Rackauckas

11

Tôi nghĩ rằng "học X hơn Y" không phải là cách đúng để đặt câu hỏi. Trong thực tế, bạn có thể tìm hiểu (ít nhất là cơ bản về) cả hai và quyết định công cụ phù hợp tùy thuộc vào nhiệm vụ cụ thể trong tay. Và vì Julia được thừa hưởng hầu hết các cú pháp và khái niệm của nó từ các ngôn ngữ khác, nên thật dễ dàng để nắm bắt nó (cũng như Python, mặc dù tôi không chắc có thể nói như vậy về R).

Vậy ngôn ngữ nào phù hợp hơn cho nhiệm vụ nào? Dựa trên kinh nghiệm của tôi với các công cụ này, tôi sẽ đánh giá chúng như sau:

  • Đối với nghiên cứu thống kê thuần túy có thể được thực hiện với REPL và một vài tập lệnh, R dường như là sự lựa chọn hoàn hảo. Nó được thiết kế đặc biệt để thống kê, có lịch sử lâu nhất về các công cụ và có lẽ là bộ thư viện thống kê lớn nhất.

  • Nếu bạn muốn tích hợp số liệu thống kê (hoặc, ví dụ như học máy) vào hệ thống sản xuất , Python có vẻ như là một lựa chọn tốt hơn nhiều: như một ngôn ngữ lập trình đa năng, nó có một ngăn xếp web tuyệt vời, liên kết với hầu hết các API và thư viện cho mọi thứ, từ việc loại bỏ các trang web để tạo ra các trò chơi 3D .

  • Các thuật toán hiệu suất cao dễ viết hơn nhiều trong Julia . Nếu bạn chỉ cần sử dụng hoặc kết hợp các thư viện hiện có như SciKit Learn hoặc e1071 được hỗ trợ bởi C / C ++, bạn sẽ ổn với Python và R. Nhưng khi nói đến phần phụ trợ nhanh, Julia trở thành trình tiết kiệm thời gian thực: nhanh hơn nhiều Python hoặc R và không yêu cầu kiến ​​thức bổ sung về C / C ++. Như một ví dụ, Mocha.jl reimplements trong tinh khiết Julia sâu học tập khuôn khổ Caffe , ban đầu được viết bằng C ++ với một wrapper bằng Python.

  • Cũng đừng quên rằng một số thư viện chỉ có sẵn trong một số ngôn ngữ. Ví dụ, chỉ Python có hệ sinh thái trưởng thành cho thị giác máy tính, một số thuật toán so khớp hình dạng và biến dạng chỉ được triển khai ở Julia và tôi đã nghe nói về một số gói duy nhất để thống kê trong y học ở R.


Tôi sẽ nói rằng hầu hết mọi người nên cố gắng chọn một ngôn ngữ và chủ yếu là với nó --- ít nhất là đối với tôi, bằng cách sử dụng nhiều ngôn ngữ, cuối cùng tôi đã trộn lẫn chúng, mất rất nhiều thời gian theo cách đó ...
kjetil b halvorsen

1
Một vấn đề nghịch lý khi viết các thuật toán hiệu năng cao là mặc dù chúng có thể dễ dàng viết bằng ngôn ngữ cấp cao hơn như R hoặc Julia, nhưng khi bạn thực sự viết các thuật toán hiệu suất cao, bạn có thể thích sử dụng một cái gì đó như C ++. Hoặc có lẽ đó chỉ là tôi.
Vách đá AB

3

(b) Loại trường hợp sử dụng Thống kê nào bạn sẽ khuyên ai đó sử dụng Julia trong

(c) Nếu R chậm ở một nhiệm vụ nhất định, việc chuyển sang Julia hoặc Python có hợp lý không?

Chiều cao và tính toán các vấn đề chuyên sâu.

  • Đa xử lý. Các khả năng song song nút đơn của Julia ( @spawnat) thuận tiện hơn nhiều so với các khả năng của python. Ví dụ, trong python, bạn không thể sử dụng nhóm đa xử lý bản đồ trên REPL và mọi chức năng bạn muốn song song đòi hỏi rất nhiều bản tóm tắt.

  • Điện toán cụm. ClusterManagersGói của Julia cho phép bạn sử dụng một cụm tính toán gần giống như một máy đơn lẻ có nhiều lõi. [Tôi đã chơi với việc làm cho cảm giác này giống như kịch bản hơn trong ClusterUtils ]

  • Bộ nhớ dùng chung. Các SharedArrayđối tượng của Julia vượt trội so với các đối tượng bộ nhớ chia sẻ tương đương trong python.

  • Tốc độ. Việc triển khai Julia của tôi là (máy đơn) nhanh hơn so với triển khai R của tôi khi tạo số ngẫu nhiên và ở đại số tuyến tính (hỗ trợ BLAS đa luồng).
  • Khả năng tương tác. PyCallMô-đun của Julia cho phép bạn truy cập vào hệ sinh thái python mà không cần trình bao bọc - ví dụ: tôi sử dụng điều này cho pylab. Có một cái gì đó tương tự cho R, nhưng tôi đã không thử nó. Ngoài ra còn có ccallcác thư viện C / Fortran.
  • GPU. Wrappers CUDA của Julia được xa hơn phát triển hơn so với những người trong python (Rs là gần như không tồn tại khi tôi kiểm tra). Tôi nghi ngờ điều này sẽ tiếp tục là trường hợp vì việc gọi các thư viện bên ngoài ở Julia dễ dàng hơn nhiều so với python.

  • Hệ sinh thái. Các Pkgsử dụng mô-đun GitHub như một hậu phương. Tôi tin rằng điều này sẽ có tác động lớn đến khả năng duy trì lâu dài của các mô-đun Julia vì nó giúp việc cung cấp các bản vá hoặc cho chủ sở hữu chịu trách nhiệm trở nên đơn giản hơn nhiều.

  • σ

Viết mã nhanh cho các vấn đề lớn sẽ ngày càng phụ thuộc vào tính toán song song. Python vốn dĩ không thân thiện (GIL) và đa xử lý riêng trong R là AFAIK không tồn tại. Julia không yêu cầu bạn thả xuống C để viết mã biểu diễn, trong khi vẫn giữ được nhiều cảm giác của python / R / Matlab.

Nhược điểm chính của Julia đến từ python / R là thiếu tài liệu bên ngoài chức năng cốt lõi. python rất trưởng thành và những gì bạn không thể tìm thấy trong các tài liệu thường là trên stackoverflow. Hệ thống tài liệu của R là khá tốt trong so sánh.

(a) Bạn có khuyên bất kỳ người dùng mới nào của các công cụ thống kê tìm hiểu Julia qua R không?

Có, nếu bạn phù hợp với các trường hợp sử dụng trong phần (b). Nếu trường hợp sử dụng của bạn liên quan đến nhiều công việc không đồng nhất

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.