ภาษาที่ดีที่สุดสำหรับการคำนวณทางวิทยาศาสตร์ [ปิด]


10

ดูเหมือนว่าภาษาส่วนใหญ่จะมีห้องสมุดคำนวณทางวิทยาศาสตร์จำนวนหนึ่ง

  • Python มี Scipy
  • Rust มี SciRust
  • C++มีหลายอย่างรวมถึงViennaCLและArmadillo
  • JavaมีJava NumericsและColtเช่นเดียวกับหลาย ๆ

ไม่ต้องพูดถึงภาษาที่ชอบRและJuliaออกแบบมาอย่างชัดเจนสำหรับการคำนวณทางวิทยาศาสตร์

ด้วยตัวเลือกมากมายคุณจะเลือกภาษาที่ดีที่สุดสำหรับงานอย่างไร นอกจากนี้ภาษาใดที่จะเป็นคนที่มีประสิทธิภาพมากที่สุด? PythonและRดูเหมือนว่าจะมีแรงฉุดที่สุดในอวกาศ แต่ภาษาที่รวบรวมได้ดูเหมือนจะเป็นทางเลือกที่ดีกว่า และจะมีอะไรดีกว่านี้Fortranไหม ภาษาที่คอมไพล์ด้วยนอกจากนี้มักจะมีการเร่งความเร็วของ GPU ในขณะที่ตีความภาษาเช่นRและPythonไม่ ฉันควรคำนึงถึงอะไรเมื่อเลือกภาษาและภาษาใดให้ความสมดุลของยูทิลิตี้และประสิทธิภาพที่ดีที่สุด มีภาษาใดบ้างที่มีทรัพยากรการคำนวณทางวิทยาศาสตร์ที่สำคัญที่ฉันพลาดไป

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
ไม่มีคำถามอยู่ที่นี่ หากคุณต้องการทำวิจัยพื้นฐานเกี่ยวกับภาษาการเขียนโปรแกรมคุณควรอ่านวิกิพีเดียดีกว่ารอให้บางคนปรากฏตัวที่นี่เพื่อผลักดันงานอดิเรกของเขา
Dirk Eddelbuettel

@DirkEddelbuettel จุดที่ดีมาก คิดว่าเป็นการดีกว่าที่จะลองสร้างเนื้อหามากกว่าการปรับปรุงในจุดนี้ในเบต้า แต่ฉันไม่รู้จำนวนมากเกี่ยวกับ SE betas นั่นเป็นการเคลื่อนไหวที่ดีในส่วนของฉันหรือไม่?
indico

1
ดูตัวเลขเหล่านี้
Emre

@DirkEddelbuettel คุณไม่ได้ผิด แต่ความหวังของฉันคือการส่งเสริมการอภิปรายเกี่ยวกับลักษณะที่มีประโยชน์และเครื่องมือที่เกี่ยวข้องกับภาษาต่างๆ ภาษาที่คุณใช้เป็นเครื่องมือสำคัญในศาสตร์ข้อมูลดังนั้นความคิดของฉันก็คือผู้คนสามารถพูดคุยเกี่ยวกับเครื่องมือที่พวกเขาต้องการและมีประโยชน์ตามวัตถุประสงค์ที่นี่เป็นทรัพยากรสำหรับผู้ที่กำลังมองหางานที่คล้ายกัน
ragingSloth

1
@indico ลองcran.r-project.org/web/packages/overlap/index.htmlซึ่งเป็นคนแรกที่ฉันเลือกสุ่ม แต่จริงๆแล้วฉันรู้จักกับนักสถิติหลายคนที่ได้เขียนแพ็คเกจ R ไม่มีสักคนที่ยังเขียนงูหลามอยู่ หากต้องการขยายการสนทนาเล็กน้อยkdnuggets.com/2013/08/…เป็นสิ่งที่น่าสนใจ
Lembik

คำตอบ:


12

นี่เป็นคำถามที่ค่อนข้างใหญ่ดังนั้นนี่ไม่ได้มีไว้เพื่อเป็นคำตอบเต็มรูปแบบ แต่หวังว่ามันจะช่วยแจ้งการปฏิบัติทั่วไปเกี่ยวกับการกำหนดเครื่องมือที่ดีที่สุดสำหรับงานเมื่อมันมาถึงวิทยาศาสตร์ข้อมูล โดยทั่วไปฉันมีรายการสั้น ๆ ที่ฉันมองหาเมื่อมันมาถึงเครื่องมือใด ๆ ในพื้นที่นี้ ในลำดับที่ไม่มีพวกเขา:

  • ประสิทธิภาพการทำงาน : โดยทั่วไปจะลดลงถึงความรวดเร็วของภาษาในการคูณเมทริกซ์เนื่องจากเป็นงานที่สำคัญที่สุดในวิทยาศาสตร์ข้อมูล
  • ความสามารถในการปรับขยาย : อย่างน้อยสำหรับฉันเป็นการส่วนตัวสิ่งนี้ก็ลงมาเพื่อความสะดวกในการสร้างระบบกระจาย นี่คือที่ ๆ ภาษาที่Juliaเปล่งประกายอย่างแท้จริง
  • ชุมชน : ด้วยภาษาใด ๆ คุณกำลังมองหาชุมชนที่ใช้งานอยู่ซึ่งสามารถช่วยเหลือคุณได้เมื่อคุณติดขัดโดยใช้เครื่องมือที่คุณใช้ นี่คือที่pythonดึงไปข้างหน้าของภาษาอื่น ๆ ส่วนใหญ่
  • มีความยืดหยุ่น : ไม่มีอะไรเลวร้ายไปกว่าการถูก จำกัด ด้วยภาษาที่คุณใช้ มันไม่ได้เกิดขึ้นบ่อยนัก แต่การพยายามที่จะแสดงโครงสร้างกราฟในhaskellนั้นเป็นความเจ็บปวดที่ฉาวโฉ่และJuliaเต็มไปด้วยสถาปัตยกรรมรหัสมากมายที่เป็นผลมาจากการใช้ภาษาเด็ก
  • ใช้งานง่าย : หากคุณต้องการใช้บางสิ่งในสภาพแวดล้อมที่มีขนาดใหญ่ขึ้นคุณต้องการตรวจสอบให้แน่ใจว่าการตั้งค่านั้นตรงไปตรงมาและเป็นไปโดยอัตโนมัติ ไม่มีอะไรจะเลวร้ายยิ่งไปกว่าการตั้งค่าเครื่องฟินนิคกี้ในเครื่องจักรครึ่งโหล

มีบทความมากมายเกี่ยวกับประสิทธิภาพและความสามารถในการปรับขนาด แต่โดยทั่วไปคุณจะต้องดูความแตกต่างของประสิทธิภาพอาจอยู่ระหว่าง 5-10x ซึ่งอาจแตกต่างกันไปตามแอปพลิเคชันของคุณ เท่าที่การเร่งด้วย GPU ไปcudamatอย่างราบรื่นจริงๆแล้วมันทำให้การทำงานกับมันราบรื่นpythonขึ้นและcudaโดยทั่วไปแล้วไลบรารี่นั้นทำให้ GPU สามารถเข้าถึงการเร่งความเร็วได้มากกว่าที่เคยเป็นมา

ตัวชี้วัดหลักสองอย่างที่ฉันใช้สำหรับทั้งชุมชนและความยืดหยุ่นคือการดูที่ตัวจัดการแพคเกจของภาษาและคำถามเกี่ยวกับภาษาในไซต์เช่น SO หากมีคำถามและคำตอบที่มีคุณภาพสูงจำนวนมากเป็นสัญญาณที่ดีว่าชุมชนใช้งานได้ จำนวนแพ็กเกจและกิจกรรมทั่วไปบนแพ็กเกจเหล่านี้ยังสามารถเป็นพร็อกซีที่ดีสำหรับเมทริกนี้

เท่าที่ใช้งานง่ายไปฉันเชื่อมั่นว่าวิธีเดียวที่จะรู้ได้คือการตั้งค่าตัวคุณเอง มีความเชื่อโชคลางมากมายเกี่ยวกับเครื่องมือ Data Science โดยเฉพาะสิ่งต่าง ๆ เช่นฐานข้อมูลและสถาปัตยกรรมการคำนวณแบบกระจาย แต่ไม่มีทางที่จะรู้ได้ว่ามีบางสิ่งที่ง่ายหรือยากต่อการติดตั้งและปรับใช้โดยไม่ต้องสร้างเอง


เพื่อเพิ่มคำตอบนี้: ในแง่ของความสามารถในการขยายScalaและGoมีมูลค่าการกล่าวขวัญ
Marc Claesen

ฉันจะเพิ่มความชัดเจนและความกระชับ (เกี่ยวข้องกับไวยากรณ์และสถาปัตยกรรมภาษา แต่ไม่เพียง) ความสามารถในการเขียนและอ่านอย่างรวดเร็วโดยไม่เจ็บปวดทำให้ความแตกต่างอย่างมาก (เนื่องจากเวลาโปรแกรมเมอร์นั้นแพงกว่าเวลาของเครื่อง)
Piotr Migdal

5

ภาษาที่ดีที่สุดขึ้นอยู่กับสิ่งที่คุณต้องการจะทำ หมายเหตุแรก: อย่า จำกัด ตัวเองเป็นภาษาเดียว การเรียนรู้ภาษาใหม่เป็นสิ่งที่ดีเสมอ แต่ในบางจุดคุณจะต้องเลือก สิ่งอำนวยความสะดวกที่นำเสนอโดยภาษาของตัวเองเป็นสิ่งที่ชัดเจนที่จะคำนึงถึงแต่ในความคิดของฉันต่อไปนี้มีความสำคัญมากขึ้น:

  • ห้องสมุดที่มีอยู่ : คุณต้องใช้ทุกอย่างตั้งแต่เริ่มต้นหรือคุณสามารถนำสิ่งที่มีอยู่กลับมาใช้ใหม่ได้หรือไม่? โปรดทราบว่าไลบรารีเหล่านี้ไม่จำเป็นต้องเป็นภาษาใด ๆ ที่คุณกำลังพิจารณาตราบใดที่คุณสามารถเชื่อมต่อได้อย่างง่ายดาย การทำงานในภาษาที่ไม่มีการเข้าถึงห้องสมุดจะไม่ช่วยให้คุณทำงานเสร็จ
  • จำนวนผู้เชี่ยวชาญ : ถ้าคุณต้องการนักพัฒนาภายนอกหรือเริ่มทำงานเป็นทีมคุณต้องพิจารณาว่ามีกี่คนที่รู้ภาษาจริง เป็นตัวอย่างที่ดีที่สุด: หากคุณตัดสินใจที่จะทำงานใน Brainfuck เพราะคุณชอบที่จะรู้ว่าคุณจะทำงานคนเดียว มีการสำรวจจำนวนมากที่สามารถช่วยประเมินความนิยมของภาษารวมถึงจำนวนคำถามต่อภาษาใน SO
  • Toolchain : คุณมีการเข้าถึงที่ดีหรือไม่ debuggers, โปร, เครื่องมือและเอกสาร (ถ้าคุณเป็นนั้น) IDEs?

ฉันรู้ว่าส่วนใหญ่ของฉันชอบภาษาที่จัดตั้งขึ้น นี่คือจากมุมมอง 'ทำงานให้เสร็จ'

ที่กล่าวว่าฉันเชื่อว่าเป็นการดีที่จะมีความเชี่ยวชาญในภาษาระดับต่ำและภาษาระดับสูง:

  • ระดับต่ำ: C ++, C, Fortran, ... การใช้ซึ่งคุณสามารถใช้ฮอตสปอตการทำโปรไฟล์บางอย่างเฉพาะในกรณีที่คุณต้องการเพราะการพัฒนาในภาษาเหล่านี้มักจะช้ากว่าเดิม ภาษาเหล่านี้ยังคงเป็นกษัตริย์ของเนินเขาในแง่ของประสิทธิภาพที่สำคัญและมีแนวโน้มที่จะอยู่ด้านบนเป็นเวลานาน
  • ระดับสูง: Python, R, Clojure, ... เพื่อ 'กาว' สิ่งต่างๆเข้าด้วยกันและทำสิ่งที่ไม่สำคัญต่อประสิทธิภาพ (การประมวลผลล่วงหน้าการจัดการข้อมูล ... ) ฉันพบว่าสิ่งนี้มีความสำคัญเนื่องจากง่ายต่อการพัฒนาและสร้างต้นแบบอย่างรวดเร็วในภาษาเหล่านี้

4

ก่อนอื่นคุณต้องตัดสินใจว่าคุณต้องการทำอะไรจากนั้นมองหาเครื่องมือที่เหมาะสมสำหรับงานนั้น

วิธีการทั่วไปมากคือการใช้ R สำหรับเวอร์ชันแรกและดูว่าแนวทางของคุณถูกต้องหรือไม่ มันขาดความเร็วเล็กน้อย แต่มีคำสั่งที่ทรงพลังและไลบรารี่ addon ที่คุณสามารถลองใช้ได้เกือบทุกอย่าง: http://www.r-project.org/

แนวคิดที่สองคือถ้าคุณต้องการเข้าใจอัลกอริทึมที่อยู่เบื้องหลังไลบรารีคุณอาจต้องการดู Recipies เชิงตัวเลข มีให้บริการในภาษาต่าง ๆ และใช้สำหรับการเรียนรู้ได้ฟรี หากคุณต้องการที่จะใช้พวกเขาในผลิตภัณฑ์เชิงพาณิชย์คุณจะต้องขอใบอนุญาตของเรา: http://en.wikipedia.org/wiki/Numerical_Recipes

เวลาส่วนใหญ่จะไม่เป็นปัญหา แต่การค้นหาอัลกอริธึมและพารามิเตอร์ที่เหมาะสมสำหรับพวกเขาดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องมีภาษาสคริปต์ที่รวดเร็วแทนที่จะเป็นโปรแกรมมอนสเตอร์ที่ต้องรวบรวม 10 นาทีก่อนที่จะคำนวณตัวเลขสองตัว ผลลัพธ์.

และข้อดีอย่างมากในการใช้ R ก็คือมันมีฟังก์ชั่นหรือไลบรารีในตัวสำหรับไดอะแกรมเกือบทุกชนิดที่คุณอาจต้องการเห็นภาพข้อมูลของคุณ

หากคุณมีเวอร์ชั่นที่ใช้งานได้มันเป็นเรื่องง่ายที่จะย้ายไปเป็นภาษาอื่นที่คุณคิดว่ามีประสิทธิภาพมากกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.