รอดชีวิต MATLAB และ R ในฐานะโปรแกรมเมอร์ง่าย ๆ [ปิด]


25

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

  • (ทั้งคู่): การเน้นไปที่เวกเตอร์และเมทริกซ์เป็นอย่างมากจนถึงระดับที่ไม่มีพื้นฐานดั้งเดิมที่แท้จริง
  • (ทั้งคู่): ความยากของการจัดการสตริงพื้นฐาน
  • (ทั้งคู่): การขาดหรือความเชื่องช้าในการสนับสนุนโครงสร้างข้อมูลพื้นฐานเช่นตารางแฮชและ "ของจริง" เช่นประเภทพารามิเตอร์และรังแบบอาร์เรย์
  • (ทั้งคู่): มันช้าจริง ๆ โดยการตีความมาตรฐานภาษายกเว้นว่าคุณก้มตัวไปข้างหลังเพื่อทำให้โค้ดของคุณเป็นแบบเวกเตอร์
  • (ทั้งคู่): ดูเหมือนว่าไม่ได้ถูกออกแบบมาให้มีปฏิสัมพันธ์กับโลกภายนอก ตัวอย่างเช่นทั้งสองเป็นโปรแกรมขนาดใหญ่พอสมควรที่ใช้เวลาสักครู่ในการเปิดตัวและดูเหมือนจะไม่ได้รับการออกแบบมาเพื่อให้โปรแกรมตัวกรองข้อความแบบง่ายเขียนได้ง่าย นอกจากนี้การขาดการประมวลผลสตริงที่ดีทำให้ไฟล์ I / O ในรูปแบบใด ๆ ยกเว้นมาตรฐานที่ใกล้เคียงที่สุด
  • (ทั้งคู่): การวางแนววัตถุดูเหมือนจะให้ความรู้สึกที่ยึดติดแน่น ใช่คุณสามารถทำมันได้ แต่มันก็ไม่ได้ทำให้รู้สึกสำนวนอะไรมากไปกว่า OO ใน C
  • (ทั้งคู่): ไม่มีวิธีที่ชัดเจนในการรับประเภทอ้างอิง ไม่มีพอยน์เตอร์หรือคลาสอ้างอิง ตัวอย่างเช่นฉันไม่รู้ว่าคุณจะม้วนรายการลิงก์ของคุณในภาษาใดภาษาหนึ่งเหล่านี้ได้อย่างไร
  • (MATLAB): คุณไม่สามารถใส่ฟังก์ชั่นหลายระดับบนสุดในไฟล์เดียวได้ซึ่งเป็นการสนับสนุนฟังก์ชั่นที่ยาวมากและการเข้ารหัสแบบตัดและวาง
  • (MATLAB): เห็นได้ชัดว่า Integers ไม่มีอยู่ในประเภท First Class
  • (R): โครงสร้างข้อมูลพื้นฐานในตัวดูเหมือนสูงเกินไปและมีเอกสารไม่ดีและดูเหมือนจะไม่เคยทำสิ่งที่ฉันคาดหวังจากประสบการณ์ของฉันที่มีโครงสร้างข้อมูลระดับเดียวกัน แต่ต่ำกว่า
  • (R): เอกสารมีการกระจายไปทั่วสถานที่และแทบจะเป็นไปไม่ได้ที่จะเรียกดูหรือค้นหา แม้แต่ D ซึ่งมักจะล้มเหลวในการจัดทำเอกสารที่ไม่ดีและยังคงเป็นอัลฟาค่อนข้างดีกว่าที่ฉันสามารถบอกได้อย่างมาก
  • (R): อย่างน้อยที่สุดเท่าที่ฉันทราบไม่มี IDE ที่ดีสำหรับมัน อีกครั้งแม้แต่ D ภาษาอัลฟา - ไอชที่มีชุมชนเล็ก ๆ ก็ทำได้ดีกว่า

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

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

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


40
python เขียนขึ้นสำหรับโปรแกรมเมอร์ "ไม่ยอมใครง่ายๆ" ตอนนี้? เกิดขึ้นเมื่อไหร่
TZHX

3
@TZHX: โอเคบางทีคำว่าฮาร์ดคอร์อาจเป็นคำที่ผิดก็ได้ วลีที่ดีกว่าคือ "คนที่เป็นโปรแกรมเมอร์และคิดเหมือนโปรแกรมเมอร์"
dsimcha

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

5
คุณกำลังบ่นว่า R และ Matlab ไม่ได้มีไว้สำหรับโปรแกรมเมอร์ที่ไม่ยอมใครง่ายๆ แต่ข้อร้องเรียนของคุณดูเหมือนว่าคุณไม่ยอมใครง่ายๆพอที่จะใช้ R และ Matlab หากคุณต้องการเขียนภาษาที่ไม่ได้มาจากตระกูลอัลกอลคุณต้องคิดในแง่ของมัน
Peter Taylor

5
Gee ภาษาโปรแกรมที่สองของฉันคือ Assembly Python ไม่ใช่ฮาร์ดคอร์ - มันอยู่ในระดับเดียวกับ R และ Matlab อย่างแม่นยำ สมมติว่ามันแตกต่างกันคือไม่เข้าใจเกิน Python ... Python ยอดเยี่ยมสำหรับการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป Matlab นั้นยอดเยี่ยมเพราะมีหลายสิ่งที่ Mathworks ทำให้เป็นเรื่องง่าย R นั้นยอดเยี่ยมเพราะมีเครื่องมือทางสถิติการเรียนรู้เครื่องการเตรียมข้อมูลการวิเคราะห์และเครื่องมือสร้างภาพที่ไม่มีใครเทียบได้ (สถิติสถิติ) Perl ของ b / c ที่ยอดเยี่ยม ... ทำอย่างที่ฉันทำ - เรียนรู้ทั้งหมดแล้วเลือกสิ่งที่ถูกต้องสำหรับงาน :)
Iterator

คำตอบ:


29

มันอาจเป็นความคิดที่ดีที่จะเข้าใกล้ภาษาเฉพาะโดเมนด้วยความคิดที่จำเป็นสำหรับการเขียนโปรแกรมส่วนใหญ่คือหรือสำหรับการเขียนโปรแกรมทั่วไปด้วยภาษาที่ใช้งานทั่วไป หากเป็นโดเมนเฉพาะพวกเขาอาจต้องใช้ช่วงเวลาการเรียนรู้ที่สูงชันและความคิดที่อึดอัดเพื่อที่จะใช้อย่างมีประสิทธิภาพมากที่สุด ฉันพิจารณาการเขียนโค้ดใน Matlab เทียบเท่ากับการเขียนโค้ดที่มีประสิทธิภาพสูงสุดรหัสเฉพาะโดเมน (ตัวอย่างเช่นการเขียนโค้ด OpenGL ที่มีประสิทธิภาพและสะอาด) ฉันได้เห็นพวกเขาย้ายมากขึ้นเรื่อย ๆ เพื่อเป็นประโยชน์ในการใช้ห้องสมุดในภาษาอื่น - ดูตัวอย่างเช่นhttp://www.mathworks.com/matlabcentral/fileexchange/12987-integrating-matlab-with-c

ฉันจะบอกว่าใช้กระบวนการเดียวกันสำหรับ DSL เหล่านี้เช่นเดียวกับที่คุณทำกับผู้อื่น:

  • เลือกปัญหาที่คุณกำลังแก้ไขอย่างระมัดระวังโดยใช้ Matlab หรือ R เพื่อให้แน่ใจว่าปัญหาเหล่านั้นเป็นปัญหาที่พวกเขาแก้ไขได้ดีที่สุด ตัวอย่างเช่นใช้ Matlab เพื่อจัดการเวกเตอร์ของคุณและไม่ใช่งานที่เหลือถ้าคุณสามารถหลีกเลี่ยงได้
  • โดยทั่วไปให้ผสม / จับคู่โซลูชันเพื่อ จำกัด ส่วนที่คุณโปรแกรมใน Matlab หรือ R ให้ตรงกับชุดย่อยของปัญหาที่พวกเขาสร้างขึ้นเพื่อจัดการ
  • ทำตามความคิดของผู้ใช้ทั่วไปในโดเมนที่ภาษานั้นถูกสร้างขึ้นเมื่อออกแบบและสร้างโซลูชันของคุณ - ปรับทัศนคติเวกเตอร์คณิตศาสตร์ให้เข้ากับโลกก่อนที่จะเริ่มทำงานกับโปรแกรม Matlab ตัวอย่างเช่น อาจเขียนงานของคุณลงบนกระดาษโดยใช้สัญกรณ์คณิตศาสตร์มาตรฐานก่อน
  • ทำงานพิเศษที่จำเป็นเพื่อสร้างสภาพแวดล้อมการทำงานที่สะดวกสบายและรับเครื่องมือที่จำเป็นสำหรับการทำงานแม้ว่าจะแตกต่างจากมาตรฐานสำหรับ DSL ตัวอย่างเช่นหากคุณเป็นผู้ใช้ emacs ให้พิจารณาใช้โหมด matlab สำหรับ emacs เพื่อทำงานของคุณ ตรวจสอบให้แน่ใจว่าใช้งานได้ดีรวมถึงโหมดที่คุณตั้งค่าสำหรับภาษาอื่น
  • พร้อมที่จะเปลี่ยน โดยเฉพาะอย่างยิ่งถ้าคุณต้องกลับมาใช้ภาษาบ่อยครั้งตรวจสอบให้แน่ใจว่าได้สร้างระบบนิเวศที่เชื่อถือได้ซึ่งงานที่คุณทำใน DSL นั้นมีอยู่ในงานเฉพาะโดเมนเท่านั้นและมันง่ายที่สุดที่จะเปลี่ยนเป็นภาษาอื่นสำหรับ ส่วนที่เหลือจากการทำงานของคุณ เตือนตัวเองบ่อยกว่าปกติเพื่อค้นหาวิธีการทำงานที่ไม่ใช่ DSL ในระบบอื่น

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

25

ฉันจะคำนำนี้โดยสังเกตว่าฉันคุ้นเคยกับ MATLAB แต่ไม่ใช่อาร์

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

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

MATLAB นั้นเป็นคนต่างด้าวสำหรับคุณเพราะมันถูกออกแบบมาเพื่อให้นักวิทยาศาสตร์และวิศวกรทำการคูณเมทริกซ์และการคำนวณ ODE อย่างรวดเร็ว MATLAB ไม่ได้วัดความหมายของคำว่า "ไม่ยอมใครง่ายๆ" ของคุณเพราะมันไม่ควรจะเป็น การพยายามคิดเกี่ยวกับ MATLAB ในแง่ของ Python หรือ D ก็เหมือนกับการพยายามคิดถึง LISP หรือ Haskell ในแง่ของ C หรือเกี่ยวกับ Verilog และ VHDL ในแง่ของ JavaScript --- พวกเขาแก้ปัญหาต่าง ๆ และแก้ไขปัญหาด้วยวิธีที่ต่างกันอย่างสิ้นเชิง เพื่อความเป็นธรรม MATLAB ได้สร้างตัวเลือกการออกแบบภาษาที่แปลกประหลาด (ไม่เป็นไร) ที่ฉันไม่สามารถคาดเดาได้แม้แต่ในมุมมองของภาษาเฉพาะโดเมน แต่ไม่มีเหตุผลใดเป็นพิเศษว่าทำไมนักดาราศาสตร์จึงควรดูแลร่างกายซีเลสเชียล X ว่าอยู่ที่ 48 AU ห่างจากเทห์ฟากฟ้า Y อย่างสิ้นเชิงเมื่อเทียบกับ 48.0 AU

ตอนนี้โชคดีที่ห้องสมุดบางแห่งกำลังเข้ามาในฉากซึ่งเป็นไปตามที่คุณแนะนำ: การสนับสนุนที่ดีสำหรับการคำนวณทางวิทยาศาสตร์ในภาษาที่ใช้งานทั่วไป สำหรับ Python นั้นมีNumPy / Matplotlibซึ่งมีขอบที่ขรุขระ แต่ก็มีฟังก์ชัน MATLAB ที่เหมาะสมภายใน Python เหตุผลที่ไม่ได้มีโครงการอื่นเช่นนี้เพราะห้องสมุดยากที่จะเขียนและให้บริการตลาดที่ครอบคลุมโดย MATLAB และ FORTRAN อย่างไม่น่าเชื่อ

หากคุณต้องใช้ MATLAB หรือ R อย่างยิ่งคุณไม่สามารถเข้าถึงการเขียนโปรแกรมในลักษณะเหมือนโปรแกรมเมอร์ "ไม่ยอมใครง่ายๆ" คุณต้องเข้าใกล้มันเช่นนักวิทยาศาสตร์หรือวิศวกร "ไม่ยอมใครง่ายๆ" สำหรับ LISP คุณได้คิดว่าในการเรียกซ้ำ ใน MATLAB คุณต้องคิดในเมทริกซ์ ปัดเรื่องพีชคณิตเชิงเส้น ( การบรรยายของ MITในหัวข้อเป็นการทบทวนที่ยอดเยี่ยม) มิฉะนั้นวิธีเดียวที่จะ "เอาตัวรอด" MATLAB คือการฝึกฝนให้จดจำว่าเมื่อใดที่ลูปสามารถถูกแทนที่ด้วยการดำเนินการแบบเวกเตอร์หรือเมื่อปัญหาของคุณลดลงในการค้นหาค่าลักษณะเฉพาะของผลิตภัณฑ์ภายนอก


ใช่โดยรวมแล้วฉันชอบ Numpy / Scipy / Matplotlib และใช้เมื่อใดก็ตามที่เป็นทางเลือกที่ชัดเจนคือ MATLAB / R ข้อร้องเรียนเพียงอย่างเดียวของฉันเกี่ยวกับสิ่งเหล่านี้คือพวกเขาไม่ได้ลึกเท่ากับ MATLAB / R และเนื่องจากพวกเขาเป็น Python พวกเขายังค่อนข้างช้า
dsimcha

4
@dsimcha นี้เป็นจริงไม่ถูกต้อง ในการศึกษาประสิทธิภาพนี้ Numpy อยู่ในระดับที่เทียบเท่ากับ MATLAB และ Pyrex อยู่ในระดับ 2 C ++
wvoq

@wvoq: การชี้แจง: ฉันหมายถึง Python interpreter นั้นช้าไม่ใช่ Numpy ฉันรู้ว่า Numpy นั้นเป็นเสื้อคลุมสำหรับ BLAS และ LAPACK ซึ่งเร็วมาก แน่นอนว่ายังคงมีค่าใช้จ่ายคงที่ของการโทรเข้าสู่รหัสนี้ ฉันยังรับรู้ถึง Pyrex, Cython และอื่น ๆ อีกมากมายและพวกเขาก็ช่วยเหลือ แต่คุณยังคงผสมภาษาในระดับที่ละเอียดและสิ่งนี้อาจเป็นสาเหตุของความไม่ลงรอยกัน
dsimcha

2
@dsimcha ค่าใช้จ่ายในการโทร Numpy เป็นค่าคงที่ ในการศึกษาการแสดงที่ฉันพูดถึงคุณจะได้รับสิบสองสามวินาทีด้วย C ++ เวลานั้นต้องเปรียบเทียบกับเวลาที่ใช้ในการเขียนและแก้ไขข้อบกพร่องและการดีบักการเรียก BLAS ในเวลานั้น อาจมีคำแนะนำให้ถามว่าทำไมไม่เขียนทุกอย่างในที่ประชุม? หรือแม้แต่รหัสเครื่องตรงเนื่องจากการแปลงจากชุดประกอบเป็นรหัสเครื่องจะเพิ่มค่าใช้จ่ายคงที่บ้างไหม
wvoq

3
@dsimcha Huh? คุณต้องการทำทุกอย่างด้วยภาษาเดียว (เร็ว) คุณชอบ Python มากที่สุดแล้วคุณบ่นเกี่ยวกับ Python ว่าช้าหรือไม่? ดังนั้นประเด็นทั้งหมดคืออะไร ฉันเดาว่าคุณต้องการให้ MATLAB มีคุณสมบัติทั่วไปมากขึ้นและเร็วกว่าภาษาที่แปลแล้วใช่ไหม
Chris บอก Reinstate Monica

14

การใช้คำว่า "โปรแกรมเมอร์ไม่ยอมใครง่ายๆ" ซ้ำ ๆ ของคุณในการอ้างอิงถึงตัวคุณ พร้อมกับความขุ่นเคืองของคุณที่นักออกแบบของ R และ MATLAB ไม่ได้ทำให้ฉันงี่เง่าและสนับสนุนให้ผู้คนไม่วิจารณ์คุณอย่างจริงจัง

หากคุณต้องการอ่านบทวิจารณ์ที่จริงจังของ R คุณควรอ่านบทความนี้โดย Ross Ihaka นักออกแบบของ R ดูเหมือนว่าฉันจะออกแบบแกนR ยากกว่าการใช้ D หรือ Python


2
-1 ฉันไม่เคยตั้งใจจะบอกเป็นนัยว่านักออกแบบของ MATLAB และ R เป็นสิ่งอื่นนอกจากโปรแกรมเมอร์ที่ดีมาก ๆ อย่างไรก็ตาม MATLAB และ R ไม่ได้ออกแบบมาสำหรับโปรแกรมเมอร์ง่าย ๆ
dsimcha

3
"... ดูเหมือนว่าภาษาเหล่านี้ได้รับการออกแบบโดยผู้ที่ไม่ได้เป็นโปรแกรมเมอร์ฮาร์ดคอร์และไม่คิดว่าจะเป็นโปรแกรมเมอร์ง่าย ๆ "
wvoq

6
คุณยังไม่ได้ชี้แจงว่า "โปรแกรมเมอร์ไม่ยอมใครง่ายๆ" คืออะไร ตามตัวอย่างของคุณ "ไม่ยอมใครง่ายๆ" ฟังดูเหมือนว่า "สบายที่สุดกับ C ++" ซึ่งในกรณีนี้ R และ MATLAB จะไม่ยอมใครง่ายๆตามคำจำกัดความ ตัวอย่างเกือบทั้งหมดของคุณลดการร้องเรียนว่าภาษาเหล่านี้ไม่ใช่สิ่งที่คุณคุ้นเคยโดยไม่ถามว่าทำไมผู้เชี่ยวชาญในสาขาเหล่านี้เห็นสมควรที่จะนำไปใช้อย่างนั้น
wvoq

1
ในแง่ของคำจำกัดความฉันคิดว่ามันชัดเจน แต่ "โปรแกรมเมอร์ง่าย ๆ " เป็นเพียงคนที่สบายใจกับแนวคิดการเขียนโปรแกรมพื้นฐานเช่นการอ้างอิง / พอยน์เตอร์, การวางแนววัตถุ, ฟังก์ชั่นแลมบ์ดา, โครงสร้างข้อมูลพื้นฐาน ฯลฯ และใช้ในการพัฒนา ในภาษาที่ใช้งานทั่วไป
dsimcha

2
ประการแรก "ง่าย ๆ " เป็นคำที่โหลดค่อนข้างถ้าตั้งใจจะแสดง "คนที่คุ้นเคยกับแนวคิดพื้นฐานในการเขียนโปรแกรม oo / ขั้นตอน / การทำงาน" ประการที่สองฉันไม่สามารถพูดกับ MATLAB ได้ แต่ R มีทุกสิ่งเหล่านี้ ข้อแตกต่างเพียงอย่างเดียวคือในภาษา R คุณจะได้รับการกระตุ้นจากภาษาให้จัดการปัญหาของคุณในลักษณะที่ว่าองค์ประกอบของคำศัพท์ทางสถิติกลายเป็นสิ่งดั้งเดิมของคุณ เหตุผลของเรื่องนี้ก็คือนักสถิติและผู้เรียนรู้ด้วยเครื่องจักรมักจะทำงานกับปัญหาที่แสดงออกมาอย่างง่ายดายซึ่งทำให้ R เป็นธรรมชาติแม้ว่าคุณจะพอใจกับสิ่งที่ "ยากกว่า"
wvoq

9

การเน้นไปที่เวกเตอร์และเมทริกซ์เป็นอย่างมากจนถึงขั้นที่ไม่มีพื้นฐานดั้งเดิมที่แท้จริง

มันขึ้นอยู่กับสิ่งที่คุณเรียกว่าดั้งเดิมดั้งเดิม ใน R เวกเตอร์เป็นดั่งดั้งเดิมอย่างแท้จริง นั่นคือตัวแปรทั้งหมดเป็นเวกเตอร์ ในทำนองเดียวกันใน MATLAB ตัวแปรทั้งหมดเป็นเมทริกซ์

ความยากลำบากในการจัดการสตริงขั้นพื้นฐาน

ใน MATLAB การจัดการสตริงนั้นมีประสิทธิภาพ แต่ฉันยอมรับว่าโค้ดนั้นน่าเกลียดและไม่ได้ใช้งาน (อย่างน้อยก็ในตอนนี้) สำหรับ R นั้นมีstringrแพ็คเกจซึ่งดีพอที่จะใช้เป็นเครื่องมือในภาษาอื่น ๆ

การขาดหรือความเชื่องช้าในการสนับสนุนโครงสร้างข้อมูลพื้นฐานเช่นตารางแฮชและ "ของจริง" เช่นประเภทพารามิเตอร์และเนสท์เล่อาร์เรย์

ใน R เวกเตอร์มีชื่อที่ทำงานเหมือนแฮช นอกจากนี้ยังมีhashและfilehashแพ็คเกจ ไม่แน่ใจเกี่ยวกับการใช้งาน MATLAB แต่คุณสามารถโทรหารุ่น JAVA หรือ. NET ได้อย่างง่ายดายหากคุณต้องการ

มันช้ามาก ๆ โดยการตีความมาตรฐานภาษายกเว้นว่าคุณก้มตัวไปข้างหลังเพื่อทำให้โค้ดของคุณเป็นแบบเวกเตอร์

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

ดูเหมือนว่าพวกเขาจะไม่ได้รับการออกแบบมาให้มีปฏิสัมพันธ์กับโลกภายนอก ตัวอย่างเช่นทั้งสองเป็นโปรแกรมขนาดใหญ่พอสมควรที่ใช้เวลาสักครู่ในการเปิดตัวและดูเหมือนจะไม่ได้รับการออกแบบมาเพื่อให้โปรแกรมตัวกรองข้อความแบบง่ายเขียนได้ง่าย นอกจากนี้การขาดการประมวลผลสตริงที่ดีทำให้ไฟล์ I / O ในรูปแบบใด ๆ ยกเว้นมาตรฐานที่ใกล้เคียงที่สุด

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

การวางแนววัตถุดูเหมือนจะให้ความรู้สึกที่ยึดติดแน่น ใช่คุณสามารถทำมันได้ แต่มันก็ไม่ได้ทำให้รู้สึกสำนวนอะไรมากไปกว่า OO ใน C

ตกลงกัน; พวกเขาเป็นภาษาขั้นตอนหลัก

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

ตกลงใน R ใน MATLAB การอ้างอิงถูกเรียกว่า handle

คุณไม่สามารถใส่ฟังก์ชั่นระดับบนสุดหลายไฟล์ไว้ในไฟล์เดียวได้ซึ่งเป็นการกระตุ้นให้ฟังก์ชั่นที่ยาวมากและการเข้ารหัสแบบตัดและวาง

เรื่องไร้สาระ เพียงสร้างไฟล์หลายไฟล์

เห็นได้ชัดว่าจำนวนเต็มไม่ได้อยู่ในประเภทชั้นหนึ่ง

พวกเขาทำ. ดูint8, int16, และint32int64

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

เหมาะสำหรับการวิเคราะห์ข้อมูล โปรดให้ตัวอย่างที่เฉพาะเจาะจงของพฤติกรรมที่ไม่คาดคิด

เอกสารมีการกระจายไปทั่วสถานที่และแทบจะเป็นไปไม่ได้ที่จะเรียกดูหรือค้นหา แม้แต่ D ซึ่งมักจะล้มเหลวในการจัดทำเอกสารที่ไม่ดีและยังคงเป็นอัลฟาค่อนข้างดีกว่าที่ฉันสามารถบอกได้อย่างมาก

มีเอกสารหลายชนิด เริ่มต้นด้วย?some_function, RSiteSearch('some concept'), rseek.orgและsosแพคเกจ ไม่ต้องพูดถึงคู่มือที่มาพร้อมกับการติดตั้ง หรือหนังสือที่ดี

อย่างน้อยที่สุดเท่าที่ฉันทราบไม่มี IDE ที่ดีสำหรับมัน อีกครั้งแม้แต่ D ภาษาอัลฟา - ไอชที่มีชุมชนเล็ก ๆ ก็ทำได้ดีกว่า

ลอง Architect หรือ RStudio หรือ Revolution Analytics IDE ดูส่วน "IDEs และโปรแกรมแก้ไขสำหรับ R" ของหน้าข้อมูลสแต็คโอเวอร์โฟลว์สำหรับลิงก์และตัวเลือกอื่น


3

MATLAB สามารถทำงานร่วมกับ Java และ C / C ++ คุณสามารถใช้เวิร์กโหลดที่ไม่ใช่ตัวเลขทั้งหมดในภาษาเหล่านี้และเรียกใช้งานจาก MATLAB

การใช้งานของพวกเขาเป็นสิ่งที่จำเป็น

มีเหตุผลที่จำเป็นหรือไม่ คุณกำลังทำงานกับฐานรหัส MATLAB ที่มีอยู่เขียนโดยคนอื่นหรือ มันเป็นข้อกำหนดในการทำงานหรือไม่? (หรือข้อกำหนดของชั้นเรียนถ้าคุณอยู่ในโรงเรียน) ถ้าไม่คุณอาจพิจารณาใช้ SciPy หรือ NumPy แทน

น่าเสียดายที่ในความเห็นส่วนตัวของฉันหากสถานการณ์นี้ถูกบังคับให้ใครบางคนมันไม่รอดชีวิตได้เสมอไป แม้แต่ในวิทยาลัยนักเรียนวิศวกรรมทุกคนไม่สามารถคุ้นเคยกับวิธีการคิดเชิงคำนวณของ MATLAB


2
ฉันตระหนักถึงวิธีการแก้ปัญหาเหล่านี้ แต่ดูเหมือนจะค่อนข้างล้าหลัง ฉันต้องการเรียก MATLAB จาก C ++, Java และอื่น ๆ ไม่ใช่วิธีอื่น ฉันต้องการอะไรนอกจาก MATLAB เป็นภาษา "คนขับ" ของฉัน
dsimcha

2
@dsimcha คุณสามารถโทรหาห้องสมุด MATLAB และ R จาก C. ดูmathworks.com/help/techdoc/matlab_external/f38569.htmlหรือmath.univ-montp2.fr/~pudlo/R_files/call_R.pdf
Charles E. Grant

0

ฉันทำงานกับ MATLAB, Python และ C (และบางครั้ง C ++) และฉันคิดว่าตัวเองเป็น (นักพัฒนาซอฟต์แวร์) โดยส่วนใหญ่อยู่ตรงข้ามกับเพื่อนร่วมงานที่มักจะเป็นนักวิทยาศาสตร์ข้อมูลนักคณิตศาสตร์หรือผู้เชี่ยวชาญด้านโดเมนอื่น ๆ

แม้ว่าฉันจะเป็นคนแรกที่ยอมรับว่ามันไม่ใช่ภาษาโปรแกรมวัตถุประสงค์ทั่วไปในแง่ที่ว่า C หรือ Python เป็นจริงฉันสนุกกับการเขียนสคริปต์ใน MATLAB ค่อนข้างมากโดยเฉพาะอย่างยิ่งสำหรับสิ่งต่าง ๆ เช่นการวิเคราะห์อนุกรมเวลาหรือการประมวลผลภาพ

มีคุณสมบัติสองสามอย่างของภาษาซึ่งแม้ว่าโดยทั่วไปจะนำไปใช้อย่างไม่มีประสิทธิภาพ แต่ก็เป็นความสุขที่จะใช้ ตัวอย่างเช่นใช้การทำดัชนีแบบลอจิคัล: ฉันสามารถสร้างตรรกะเวกเตอร์หรือเมทริกซ์ที่เลือกภูมิภาคที่น่าสนใจและตั้งชื่อมันว่า "isInROI" โดยใช้การดำเนินการตัวกรองเพื่อเลือกองค์ประกอบจากเวกเตอร์หรือเมทริกซ์ "ข้อมูล" ในภูมิภาคนั้น จากนั้นเป็นเรื่องของการเขียน: "roiData = data (isInROI)"

มันเป็นช่วงเวลาเช่นนี้ที่ทำให้ฉันซาบซึ้ง MATLAB และทำให้ฉันสามารถมองข้ามความผิดบาปอื่น ๆ มากมายและพูดคุยกันได้มากมาย


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