과학 컴퓨팅을위한 최고의 언어


10

대부분의 언어에는 몇 가지 과학 컴퓨팅 라이브러리가 있습니다.

  • 파이썬은 Scipy
  • Rust 있다 SciRust
  • C++이 등 여러 가지 ViennaCLArmadillo
  • JavaJava NumericsColt다른 여러뿐만 아니라

같은 언어를 언급하지 않는 RJulia과학 컴퓨팅을 위해 명시 적으로 디자인했다.

다양한 옵션을 통해 작업에 가장 적합한 언어를 어떻게 선택합니까? 또한 어떤 언어가 가장 성능이 좋습니까? Python그리고 R공간에서 가장 견인을 갖고있는 것 같다,하지만 더 나은 선택이 될 것 같은 논리적으로 컴파일 된 언어 보인다. 그리고 무엇보다 성능이 뛰어 Fortran납니까? 인터프리터 언어는 좋아하면서 또한 컴파일 된 언어는 GPU 가속을하는 경향이 RPython하지 않습니다. 언어를 선택할 때 무엇을 고려해야하며, 어떤 언어가 유틸리티와 성능의 균형을 가장 잘 유지합니까? 또한 내가 놓친 상당한 과학 컴퓨팅 리소스가있는 언어가 있습니까?

efficiency  statistics  tools  knowledge-base  machine-learning  neural-network  deep-learning  optimization  hyperparameter  machine-learning  time-series  categorical-data  logistic-regression  python  visualization  bigdata  efficiency  classification  binary  svm  random-forest  logistic-regression  data-mining  sql  experiments  bigdata  efficiency  performance  scalability  distributed  bigdata  nlp  statistics  education  knowledge-base  definitions  machine-learning  recommender-system  evaluation  efficiency  algorithms  parameter  efficiency  scalability  sql  statistics  visualization  knowledge-base  education  machine-learning  r  python  r  text-mining  sentiment-analysis  machine-learning  machine-learning  python  neural-network  statistics  reference-request  machine-learning  data-mining  python  classification  data-mining  bigdata  usecase  apache-hadoop  map-reduce  aws  education  feature-selection  machine-learning  machine-learning  sports  data-formats  hierarchical-data-format  bigdata  apache-hadoop  bigdata  apache-hadoop  python  visualization  knowledge-base  classification  confusion-matrix  accuracy  bigdata  apache-hadoop  bigdata  efficiency  apache-hadoop  distributed  machine-translation  nlp  metadata  data-cleaning  text-mining  python  pandas  machine-learning  python  pandas  scikit-learn  bigdata  machine-learning  databases  clustering  data-mining  recommender-system 

12
여기에 의문의 여지가 없습니다. 프로그래밍 언어에 대한 기본 연구가 필요한 경우, 누군가가 그의 취미를 밀기 위해 팝업을 기다리는 것을 기다리는 것보다 Wikipedia를 읽는 것이 좋습니다.
Dirk Eddelbuettel

@ DirkEddelbuettel 아주 좋은 지적입니다. 베타의 현재 시점에서 콘텐츠를 수정하는 것보다 콘텐츠 제작을 시도하는 것이 더 좋지만 SE 베타에 대해서는 많이 몰랐습니다. 그것은 저의 좋은 움직임 이었습니까?
indico

1
숫자 들을 보세요 .
Emre

@ DirkEddelbuettel 당신이 틀리지는 않지만, 다양한 언어와 관련된 유용한 특성과 도구에 대한 토론을 장려하고 싶었습니다. 사용하는 언어는 데이터 과학에서 중요한 도구이므로 사람들은 비슷한 작업을 시도하는 사람들을위한 리소스로 사람들이 선호하는 도구에 대해 토론하고 객관적인 이점을 논의 할 수 있다고 생각했습니다.
ragingSloth

1
@indico 시도 cran.r-project.org/web/packages/overlap/index.html 나는 무작위로 선택하는 일이 바로 첫 번째입니다. 그러나 실제로 R 패키지를 작성한 많은 통계학자를 개인적으로 알고 있습니다. 아직 아무도 파이썬을 작성하지 않았습니다. 대화를 조금 넓히기 위해 kdnuggets.com/2013/08/… 이 흥미 롭습니다.
Lembik 2016 년

답변:


12

이것은 매우 방대한 질문이므로 완전한 답변을 의도 한 것은 아니지만 데이터 과학과 관련하여 업무에 가장 적합한 도구를 결정하는 일반적인 방법을 알려주는 데 도움이되기를 바랍니다. 일반적으로, 나는이 분야의 도구와 관련하여 내가 찾는 자격 목록이 비교적 짧습니다. 특별한 순서는 없습니다 :

  • 퍼포먼스 : 기본적으로 데이터 곱셈에서 가장 중요한 작업 인 언어가 얼마나 빨리 매트릭스 곱셈을 수행하는지로 요약됩니다.
  • 확장 성 : 적어도 개인적으로는 분산 시스템을 쉽게 구축 할 수 있습니다. 이것은 같은 언어가 Julia실제로 빛을 발하는 곳입니다.
  • 커뮤니티 : 어떤 언어를 사용하든 사용중인 도구를 사용하여 문제를 해결할 수있는 적극적인 커뮤니티를 찾고 있습니다. 이곳은 python대부분의 다른 언어보다 훨씬 앞서 있습니다.
  • 유연성 : 사용하는 언어에 의해 제한되는 것보다 더 나쁜 것은 없습니다. 그것은 자주 발생하지는 않지만 그래프 구조를 표현하려는 haskell것은 악명 높은 고통이며, Julia그러한 어린 언어의 결과로 많은 코드 아키텍처 고통으로 가득 차 있습니다.
  • 사용 편의성 : 더 큰 환경에서 무언가를 사용하려면 설정이 간단하고 자동화 될 수 있어야합니다. 십여 대의 기계에 삐걱 거리는 빌드를 설정하는 것보다 더 나쁜 것은 없습니다.

성능과 확장성에 대한 많은 기사가 있지만 일반적으로 특정 응용 프로그램에 따라 중요하지 않을 수도있는 언어 간 5-10 배의 성능 차이를 봅니다. GPU 가속이 진행 cudamat되는 한 실제로 작업을 원활하게 수행하는 방법 python이며, cuda라이브러리는 일반적으로 GPU 가속을 예전보다 훨씬 쉽게 액세스 할 수 있도록했습니다.

커뮤니티와 유연성 모두에 사용하는 두 가지 기본 메트릭은 언어의 패키지 관리자와 SO와 같은 사이트의 언어 질문을 보는 것입니다. 많은 양질의 질문과 답변이 있다면, 커뮤니티가 활발하다는 것을 나타내는 좋은 신호입니다. 패키지 수와 해당 패키지에 대한 일반 활동도이 지표에 적합한 프록시가 될 수 있습니다.

사용의 용이성이있는 한, 나는 실제로 알 수있는 유일한 방법은 실제로 그것을 스스로 설정하는 것입니다. 많은 데이터 과학 도구, 특히 데이터베이스 및 분산 컴퓨팅 아키텍처와 같은 많은 미신이 있지만, 직접 구축하지 않고 무언가를 설정하고 배포하기가 쉬운 지 실제로 알 수는 없습니다.


확장 성 측면에서,이 대답에 추가 ScalaGo가치에 대한 언급이다.
Marc Claesen

명확성과 간결성을 추가 합니다 (구문 및 언어 아키텍처와 관련이있을뿐 아니라). 프로그래머가 시간을 기계 시간보다 비싸기 때문에 고통없이 빠르게 읽고 쓸 수 있다는 것은 큰 차이를 만듭니다.
Piotr Migdal 2018 년

5

가장 좋은 언어는 당신이하고 싶은 것에 달려 있습니다. 첫 번째 말 : 자신을 한 언어로 제한하지 마십시오. 새로운 언어를 배우는 것은 항상 좋은 일이지만, 어느 시점에서 선택해야합니다. 언어 자체가 제공하는 시설은 반드시 고려해야 할 사항 이지만 제 생각에는 다음이 더 중요합니다.

  • 사용 가능한 라이브러리 : 처음부터 모든 것을 구현해야합니까, 아니면 기존 항목을 재사용 할 수 있습니까? 이 라이브러리는 쉽게 인터페이스 할 수있는 한 어떤 언어로도 고려할 필요가 없습니다. 라이브러리에 액세스 할 수없는 언어로 작업해도 작업을 수행하는 데 도움이되지 않습니다.
  • 전문가 수 : 외부 개발자를 원하거나 팀에서 일하기 시작하면 실제로 언어를 아는 사람들의 수를 고려해야합니다. 극단적 인 예를 들자면, Brainfuck에서 마음에 드는 일을하기로 결정했다면 혼자 일할 것임을 아십시오. SO의 언어 당 질문 수를 포함하여 언어의 인기도를 평가하는 데 도움이되는 많은 설문 조사가 있습니다.
  • 툴체인 : 훌륭한 디버거, 프로파일 러, 문서 도구 및 IDE에 액세스 할 수 있습니까?

나는 대부분의 요점들이 확립 된 언어를 선호한다는 것을 알고 있습니다. 이것은 'get-things-done'관점입니다.

나는 개인적으로 저수준 언어와 고급 언어에 능숙 해지는 것이 훨씬 낫다고 믿는다.

  • 낮은 수준 : C ++, C, Fortran, ... 사용하면 이 언어로 개발하는 것이 일반적으로 느리기 때문에 필요한 경우에만 특정 프로파일 링 핫 스팟을 구현할 수 있습니다 . 이 언어는 중요한 성능 측면에서 언덕의 왕으로 남아 있으며 오랫동안 최고를 유지할 것입니다.
  • 높은 수준 : Python, R, Clojure, ...을 함께 '접착제'하고 성능이 중요하지 않은 것을 수행합니다 (전처리, 데이터 처리 등). 이 언어로 빠른 개발과 프로토 타입을 만드는 것이 훨씬 쉬워서 이것이 중요하다는 것을 알게되었습니다.

4

먼저 원하는 것을 결정한 다음 해당 작업에 적합한 도구를 찾으십시오.

가장 일반적인 접근 방식은 첫 번째 버전에 R을 사용하고 접근 방식이 올바른지 확인하는 것입니다. 속도가 조금 부족하지만 매우 강력한 명령과 애드온 라이브러리가있어 거의 모든 것을 시도 할 수 있습니다 : http://www.r-project.org/

두 번째 아이디어는 라이브러리 뒤의 알고리즘을 이해하려면 Numerical Recipies를 살펴볼 수 있습니다. 다른 언어로 제공되며 학습에 무료로 사용할 수 있습니다. 상용 제품에 사용하려면 라이센스를 구매해야합니다. http://en.wikipedia.org/wiki/Numerical_Recipes

대부분의 시간 성능은 문제가 아니라 올바른 알고리즘과 매개 변수를 찾는 것이므로 먼저 두 개의 숫자를 계산하고 결과.

R을 사용하면 데이터를 시각화해야하는 거의 모든 종류의 다이어그램에 대한 내장 함수 또는 라이브러리가 있다는 장점이 있습니다.

그런 다음 작동하는 버전을 사용하는 경우 성능이 뛰어난 다른 언어로 이식하기가 거의 쉽습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.