MATLAB und R als Hardcore-Programmierer überleben [geschlossen]

25

Ich liebe es, in Sprachen zu programmieren, die sich an Hardcore-Programmierer zu richten scheinen. (Meine Favoriten sind Python und D.) MATLAB richtet sich an Ingenieure und R an Statistiker. Diese Sprachen wurden anscheinend für Leute entwickelt, die keine Hardcore-Programmierer sind und nicht wie Hardcore-Programmierer denken. Ich finde es immer etwas umständlich, sie zu benutzen, und bis zu einem gewissen Grad kann ich nicht sagen, warum. Hier sind einige Probleme, die ich identifiziert habe:

  • (Beide): Die extreme Betonung von Vektoren und Matrizen, sofern es keine wahren Primitive gibt.
  • (Beide): Die Schwierigkeit der grundlegenden String-Manipulation.
  • (Beide): Fehlende oder umständliche Unterstützung für grundlegende Datenstrukturen wie Hash-Tabellen und "echte", dh typparametrische und verschachtelbare Arrays.
  • (Beide): Sie sind wirklich sehr, sehr langsam, selbst nach interpretierten Sprachstandards, sofern Sie sich nicht nach hinten bücken, um Ihren Code zu vektorisieren.
  • (Beide): Sie scheinen nicht für die Interaktion mit der Außenwelt ausgelegt zu sein. Beispielsweise handelt es sich bei beiden Programmen um relativ umfangreiche Programme, deren Start einige Zeit in Anspruch nimmt, und die anscheinend nicht so konzipiert sind, dass einfache Textfilterprogramme einfach zu schreiben sind. Darüber hinaus macht das Fehlen einer guten Zeichenfolgenverarbeitung die Datei-E / A in alles andere als sehr Standardformen nahezu unmöglich.
  • (Beide): Die Objektorientierung scheint sich sehr verschraubt anzufühlen. Ja, Sie können es tun, aber es fühlt sich nicht viel idiomatischer an als OO in C.
  • (Beide): Kein offensichtlicher, einfacher Weg, einen Referenztyp zu erhalten. Keine Zeiger oder Klassenreferenzen. Zum Beispiel habe ich keine Ahnung, wie Sie Ihre eigene verknüpfte Liste in einer dieser Sprachen rollen.
  • (MATLAB): Sie können nicht mehrere Funktionen der obersten Ebene in eine einzige Datei einfügen. Dies fördert sehr lange Funktionen und ermöglicht das Ausschneiden und Einfügen von Code.
  • (MATLAB): Ganzzahlen existieren anscheinend nicht als erstklassiger Typ.
  • (R): Die grundlegenden eingebauten Datenstrukturen scheinen viel zu hoch und schlecht dokumentiert zu sein und scheinen aufgrund meiner Erfahrung mit ähnlichen Datenstrukturen, die jedoch niedriger sind, nie ganz das zu tun, was ich erwartet habe.
  • (R): Die Dokumentation ist über den gesamten Ort verteilt und praktisch nicht durchsuchbar. Sogar D, das oft für schlechte Dokumentation angeklopft wird und immer noch ziemlich alpha ist, ist, soweit ich das beurteilen kann, wesentlich besser.
  • (R): Soweit ich weiß, gibt es keine gute IDE dafür. Auch hier ist D, eine ziemlich alpha-artige Sprache mit einer kleinen Community, besser.

Im Allgemeinen glaube ich auch, dass MATLAB und R leicht durch einfache alte Bibliotheken in allgemeineren Sprachen ersetzt werden könnten, wenn ausreichend umfassende Bibliotheken vorhanden wären. Dies gilt insbesondere für neuere Mehrzwecksprachen, die viele Funktionen für Bibliotheksschreiber enthalten.

Warum erscheinen mir R und MATLAB so komisch? Gibt es andere wichtige Probleme, die Sie bemerkt haben und die dazu führen können, dass diese Sprachen für Hardcore-Programmierer ungewöhnlich sind? Was sind gute Überlebenstipps, wenn ihre Verwendung erforderlich ist?

Bearbeiten: Ich sehe ein Problem aus einigen der Antworten, die ich bekommen habe. Ich persönlich bevorzuge bei der Analyse von Daten ein Skript, das die gesamte Pipeline enthält. Dies impliziert, dass eine Allzwecksprache verwendet werden muss. Ich hasse es, ein Skript schreiben zu müssen, um die Daten zu "bereinigen" und auszuspucken, dann ein anderes, um sie in einer völlig anderen Umgebung wieder einzulesen usw. Ich finde die Reibung, MATLAB / R für einige meiner Arbeiten zu verwenden, und ein komplettes Eine andere Sprache mit einem völlig anderen Adressraum und einer anderen Denkweise, damit der Rest eine riesige Quelle der Reibung ist. Außerdem weiß ich, dass es Klebeschichten gibt, aber sie scheinen immer schrecklich kompliziert und eine Quelle der Reibung zu sein.

dsimcha
quelle
40
Python ist jetzt für "Hardcore" -Programmierer geschrieben? wann ist das passiert
TZHX
3
@TZHX: Ok, vielleicht war Hardcore das falsche Wort. Ein besserer Ausdruck wäre "Leute, die Programmierer sind und wie Programmierer denken".
Dsimcha
17
Ich mag den Begriff "Hardcore-Programmierer" wirklich nicht. Es klingt wie eine Art Elitismus, und der Begriff "Universalprogrammierer" hätte gerade ausgereicht, um das Gleiche zu sagen.
Blubb
5
Sie beschweren sich, dass R und Matlab nicht für Hardcore-Programmierer sind, aber Ihre Beschwerden scheinen zu sein, dass Sie nicht hardcore genug sind, um R und Matlab zu verwenden. Wenn Sie in einer Sprache schreiben möchten, die nicht aus der Algol-Familie stammt, müssen Sie in ihren Begriffen denken.
Peter Taylor
5
Meine zweite Programmiersprache war Assembly. Python ist kein harter Kern - es ist genau auf dem gleichen Niveau wie R und Matlab. Anzunehmen, dass es anders ist, bedeutet, nicht viel über Python hinaus zu verstehen ... Python ist fantastisch für die allgemeine Programmierung. Matlab ist großartig, weil Mathworks viele Dinge einfach macht. R ist großartig wegen der unvergleichlichen Tools für Statistik, maschinelles Lernen, Datenaufbereitung, Analyse und Visualisierung (auch bekannt als Statistik). Perls großartiges B / C ... Mach es genauso wie ich - lerne sie alle und wähle die richtige für den Job. :)
Iterator

Antworten:

29

Es ist wahrscheinlich eine schlechte Idee, sich domänenspezifischen Sprachen mit der für das Programmieren im Allgemeinen erforderlichen Denkweise zu nähern, oder allgemeine Programme mit Mehrzwecksprachen zu programmieren. Da sie domänenspezifisch sind, werden sie wahrscheinlich eine steilere Lernkurve und eine unangenehme Denkweise benötigen, um am effizientesten eingesetzt zu werden. Ich halte das Schreiben von Code in Matlab für das Schreiben von hochoptimiertem, domänenspezifischem Code (vergleichbar mit beispielsweise effizientem und sauberem OpenGL-Code). Ich habe auch gesehen, dass sie immer nützlicher werden als Bibliotheken, die in anderen Sprachen verwendet werden sollen - siehe zum Beispiel http://www.mathworks.com/matlabcentral/fileexchange/12987-integrating-matlab-with-c

Ich würde sagen, verwenden Sie für diese DSL das gleiche Verfahren wie für alle anderen:

  • Wählen Sie die Probleme, die Sie mit Matlab oder R lösen, sorgfältig aus, um sicherzustellen, dass es sich genau um die Art von Problemen handelt, die sie am besten lösen können. Verwenden Sie beispielsweise Matlab, um Ihre Vektoren zu manipulieren, und nicht für den Rest Ihrer Arbeit, wenn Sie dies vermeiden können
  • Im Allgemeinen sollten Sie die Lösung mischen / anpassen, um die in Matlab oder R programmierten Teile auf die genaue Teilmenge des Problems zu beschränken, für das sie erstellt wurden.
  • Befolgen Sie beim Entwerfen und Erstellen Ihrer Lösung die Denkweise eines typischen Benutzers in der Domäne, für die die Sprachen entwickelt wurden. Passen Sie beispielsweise eine vektormathematische Einstellung zur Welt an, bevor Sie mit der Arbeit an einem Matlab-Programm beginnen. Schreiben Sie Ihre Arbeit möglicherweise zuerst in Standardnotation auf Papier
  • Nehmen Sie sich die zusätzliche Arbeit vor, die erforderlich ist, um sich ein angenehmes Arbeitsumfeld aufzubauen, und beschaffen Sie sich die für die Ausführung der Arbeit erforderlichen Werkzeuge, auch wenn diese vom DSL-Standard abweichen. Wenn Sie beispielsweise ein Emacs-Benutzer sind, können Sie den Matlab-Modus verwenden, damit Emacs Ihre Arbeit erledigen kann. Stellen Sie sicher, dass es genauso funktioniert wie die Modi, die Sie für andere Sprachen eingerichtet haben
  • Seien Sie bereit, umzuschalten. Insbesondere wenn Sie häufig in die Sprache zurückkehren müssen, stellen Sie sicher, dass Sie sich ein zuverlässiges Ökosystem aufbauen, in dem die Arbeit, die Sie im DSL erledigen, nur für die domänenspezifische Arbeit bestimmt ist und für das es so einfach wie möglich ist, in eine andere Sprache zu wechseln den Rest deiner Arbeit. Erinnern Sie sich häufiger als gewöhnlich daran, nach Möglichkeiten zu suchen, die nicht-DSL-spezifischen Aufgaben in anderen Systemen zu erledigen
Blaubeerfelder
quelle
3
Was Sie sagen, macht vollkommen Sinn und ist in der Regel die Art und Weise, wie ich Dinge tue, wenn ich Matlab oder R verwenden muss. Der frustrierende Teil davon ist die Reibung, die durch die Integration mehrerer Sprachen mit mehreren Methoden und mehreren Adressräumen verursacht wird. In der Regel müssen die Daten an scheinbar beliebigen Stellen in Textdateien abgelegt und zurückgelesen werden, oder es muss eine spröde, hässliche und schwer zu konfigurierende Klebeschicht verwendet werden.
DSIMCHA
25

Ich gehe dem voran und stelle fest, dass ich mit MATLAB vertraut bin, aber nicht mit R.

Der Grund, warum MATLAB mit OO, String-Verarbeitung oder benutzerdefinierten Datenstrukturen nicht gut zurechtkommt, ist, dass es nicht dazu gedacht ist , diese Dinge zu tun. Es gibt viele Sprachen für OO, viele, die bei der String-Verarbeitung gute Arbeit leisten, und viele mehr, die verrückte benutzerdefinierte Datentypen unterstützen. Keiner von ihnen kann Matrixmultiplikation, weil sie nicht dafür entwickelt wurden.

Nur die Vektor- und Matrixoperationen, die MATLAB ausführt, zu optimieren, ist schwierig genug, ohne sich mit benutzerdefinierten Typen oder Zeigern auseinanderzusetzen oder was nicht (wenn es nicht schwierig wäre, könnten sie nicht so viel dafür verlangen). Das Hinzufügen einer schnellen Vektorunterstützung zu vorhandenen Mehrzwecksprachen ist ebenfalls schwierig - es erhöht den Aufwand für eine Funktion, die nur wenige Programmierer jemals verwenden werden (zu wenige Programmierer verstehen verknüpfte Listen, wie sollen sie die Eigenwertzerlegung verwenden? ).

MATLAB ist Ihnen so fremd, weil es Wissenschaftler und Ingenieure in die Lage versetzt, Matrixmultiplikationen und ODE-Berechnungen sehr schnell durchzuführen. MATLAB entspricht nicht Ihrer Definition einer "Hardcore" -Sprache, da dies nie vorgesehen war. Der Versuch, über MATLAB in Bezug auf Python oder D nachzudenken, gleicht dem Versuch, über LISP oder Haskell in Bezug auf C oder über Verilog und VHDL in Bezug auf JavaScript nachzudenken. Um fair zu sein, hat MATLAB einige (in Ordnung, viele) bizarre Sprachentwürfe getroffen, die ich selbst aus der Perspektive einer domänenspezifischen Sprache nicht verstehen kann. Es gibt jedoch keinen besonderen Grund, warum sich ein Astronom darum kümmern sollte, dass der Himmelskörper X genau 48 AE von dem Himmelskörper Y entfernt ist, im Gegensatz zu 48,0 AE.

Zum Glück kommen nun einige Bibliotheken auf die Bühne, die genau das tun, was Sie vorschlagen: eine gute Unterstützung für das wissenschaftliche Rechnen in einer universellen Sprache. Für Python gibt es NumPy / Matplotlib, das einige Ecken und Kanten hat, aber ansonsten eine angemessene MATLAB-Funktionalität in Python bietet. Der Grund, warum es kein anderes Projekt wie dieses gab, ist, dass die Bibliotheken unglaublich schwer zu schreiben sind und einen Markt bedienen, der bereits von MATLAB und FORTRAN abgedeckt wird.

Wenn Sie MATLAB oder R unbedingt verwenden müssen, können Sie nicht wie ein "Hardcore" -Programmierer an die Programmierung herangehen, sondern wie ein "Hardcore" -Wissenschaftler oder Ingenieur. Für LISP, Sie haben in Rekursion denken. In MATLAB muss man nur in Matrizen denken. Aktualisieren Sie die lineare Algebra ( die Vorlesungen des MIT zu diesem Thema sind eine großartige Rezension). Ansonsten besteht die einzige Möglichkeit, MATLAB zu "überleben", darin, zu erkennen, wann eine Schleife durch eine Vektoroperation ersetzt werden kann oder wann sich Ihr Problem darauf reduziert, die Eigenwerte eines äußeren Produkts zu finden.

Hoa Long Tam
quelle
Ja, insgesamt liebe ich Numpy / Scipy / Matplotlib und benutze sie immer dann, wenn die naheliegende Alternative MATLAB / R wäre. Meine einzige Beschwerde ist, dass sie nicht so tief sind wie MATLAB / R und dass sie, da sie Python sind, immer noch etwas langsam sind.
Dsimcha
4
@dsimcha, das ist sachlich falsch . In dieser Leistungsstudie liegt Numpy auf dem Niveau von MATLAB, und Pyrex liegt deutlich innerhalb des Zweifachen von C ++.
wvoq
@wvoq: Klarstellung: Ich meinte, der Python-Interpreter ist langsam, nicht Numpy. Ich weiß, dass Numpy hauptsächlich ein Wrapper für BLAS und LAPACK ist, die schnell sind. Natürlich gibt es immer noch den festen Aufwand, diesen Code aufzurufen. Ich bin mir auch bewusst, dass Pyrex, Cython usw. hilfreich sind, aber Sie mischen die Sprachen immer noch auf einer feinkörnigen Ebene, und dies kann immer noch zu Spannungen führen.
Dsimcha
2
@dsimcha, Der Aufwand für das Aufrufen von Numpy ist praktisch konstant. In der von mir erwähnten Leistungsstudie gewinnen Sie mit C ++ einige Zehntelsekunden. Diese Zeit muss mit der Zeit verglichen werden, die für das Schreiben und Debuggen und das Debuggen von BLAS-Aufrufen aufgewendet wurde. Es kann lehrreich sein, zu fragen, warum nicht alles in der Versammlung geschrieben wird. Oder sogar direkter Maschinencode, da die Konvertierung von Baugruppe zu Maschinencode einen festen Overhead verursacht?
Wvoq
3
@dsimcha Huh? Sie möchten alles in einer einzigen (schnellen) Sprache machen, mögen Python am liebsten und beschweren sich dann über die Langsamkeit von Python? Also, worum geht es? Ich vermute, Sie möchten nur, dass MATLAB allgemeinere Funktionen bietet und schneller ist als eine interpretierte Sprache?
Chris sagt Reinstate Monica
14

Ihre wiederholte Verwendung des Begriffs "Hardcore-Programmierer" in Bezug auf sich. zusammen mit Ihrer Unterstellung, dass die Designer von R und MATLAB es nicht sind , finde ich das sehr albern und ermutige die Leute, Ihre Kritik nicht ernst zu nehmen.

Wenn Sie ernsthafte Kritik an R lesen möchten, tun Sie gut daran, dieses Stück von Ross Ihaka, einem der Designer von R, zu lesen . Es scheint , wesentlich härteren Kern mir zu entwerfen R als zu verwenden D oder Python.

wvoq
quelle
2
-1. Ich wollte nie andeuten, dass die Designer von MATLAB und R alles andere als sehr gute Hardcore-Programmierer sind. MATLAB und R sind jedoch nicht für Hardcore-Programmierer konzipiert.
Dsimcha
3
"... anscheinend wurden diese Sprachen von Leuten entwickelt, die keine Hardcore-Programmierer sind und nicht wie Hardcore-Programmierer denken."
wvoq
6
Sie haben immer noch nicht geklärt, was ein "Hardcore-Programmierer" ist. In Ihren Beispielen klingt "Hardcore" einfach so, als ob es "am besten mit C ++ zurechtkommt". In diesem Fall sind R und MATLAB per Definition kein Hardcore. Fast alle Ihre Beispiele beschränken sich auf die Beschwerde, dass diese Sprachen nicht das sind, was Sie gewohnt sind, ohne zu fragen, warum Experten auf diesen Gebieten es für angebracht erachtet haben, sie auf diese Weise umzusetzen.
wvoq
1
Auch in Bezug auf die Definition dachte ich, dass es offensichtlich ist, aber ein "Hardcore-Programmierer" ist nur jemand, der mit grundlegenden Programmierkonzepten wie Referenzen / Zeigern, Objektorientierung, Lambda-Funktionen, grundlegenden Datenstrukturen usw. vertraut ist und an die Entwicklung gewöhnt ist in einer Allzwecksprache.
DSIMCHA
2
Nun, erstens ist "hardcore" ein ziemlich geladener Begriff, wenn er "jemanden bezeichnen soll, der mit grundlegenden Konzepten in oo / prozeduraler / funktionaler Programmierung vertraut ist". Zweitens kann ich nicht für MATLAB sprechen, aber R hat all diese Dinge. Der einzige Unterschied besteht darin, dass Sie in R von der Sprache ermutigt werden, Ihr Problem so zu formulieren, dass die Elemente des statistischen Vokabulars zu Ihren Grundelementen werden. Der Grund dafür ist, dass Statistiker und maschinelles Lernen oft mit Problemen arbeiten, die auf diese Weise leicht ausgedrückt werden können, was R zu einer natürlichen Passform macht, auch wenn Sie sich mit "härteren" Dingen wohlfühlen.
wvoq
9

Die extreme Betonung von Vektoren und Matrizen in dem Maße, dass es keine wahren Primitive gibt.

Es kommt darauf an, was Sie als echtes Primitiv bezeichnen. In R ist ein Vektor ein wahres Primitiv; Das heißt, alle Variablen sind Vektoren. Ebenso sind in MATLAB alle Variablen Matrizen.

Die Schwierigkeit der grundlegenden String-Manipulation.

In MATLAB ist die Manipulation von Zeichenfolgen mächtig, aber ich stimme zu, dass der Code häufig hässlich und nicht intuitiv ist (zumindest im Moment). Für R gibt es das stringrPaket, das sich genauso gut verwenden lässt wie Tools in jeder anderen Sprache.

Fehlende oder umständliche Unterstützung für grundlegende Datenstrukturen wie Hash-Tabellen und "echte", dh typparametrische und verschachtelbare Arrays.

In R haben Vektoren Namen, die wie ein Hash funktionieren. Es gibt auch diehashfilehash Pakete und . Sie sind sich nicht sicher über MATLAB-Implementierungen, aber Sie können JAVA- oder .NET-Versionen einfach aufrufen, wenn Sie möchten.

Sie sind sehr, sehr langsam, selbst nach interpretierten Sprachstandards, es sei denn, Sie bücken sich nach hinten, um Ihren Code zu vektorisieren.

Sobald Sie den Dreh raus haben (ich bin sicher, Sie werden es tun, wenn Sie wirklich Hardcore sind), werden Sie es verfluchen, Schleifen zu verwenden, wenn Sie zu anderen Sprachen zurückkehren. Die Ausführungsgeschwindigkeit ist ein Kompromiss für die Programmiergeschwindigkeit.

Sie scheinen nicht für die Interaktion mit der Außenwelt ausgelegt zu sein. Beispielsweise handelt es sich bei beiden Programmen um relativ umfangreiche Programme, deren Start einige Zeit in Anspruch nimmt, und die anscheinend nicht so konzipiert sind, dass einfache Textfilterprogramme einfach zu schreiben sind. Darüber hinaus macht das Fehlen einer guten Zeichenfolgenverarbeitung die Datei-E / A in alles andere als sehr Standardformen nahezu unmöglich.

Beide können Daten in nahezu jedem Format lesen und schreiben. Sie können beide aus den meisten anderen Programmiersprachen aufgerufen werden. Oder an einer Eingabeaufforderung. Sie können damit GUIs erstellen. Wie interagiert das nicht mit der Außenwelt? Wenn Sie Probleme mit Ihrem Textfilterprogramm haben, fragen Sie nach dem Stackoverflow.

Die Objektorientierung scheint sich sehr verschraubt anzufühlen. Ja, Sie können es tun, aber es fühlt sich nicht viel idiomatischer an als OO in C.

Einverstanden; Sie sind in erster Linie prozedurale Sprachen.

Kein offensichtlicher, einfacher Weg, einen Referenztyp zu erhalten. Keine Zeiger oder Klassenreferenzen. Zum Beispiel habe ich keine Ahnung, wie Sie Ihre eigene verknüpfte Liste in einer dieser Sprachen rollen.

In R vereinbart. In MATLAB werden Referenzen als Handles bezeichnet.

Sie können nicht mehrere Funktionen der obersten Ebene in eine einzige Datei einfügen, da sehr lange Funktionen und das Codieren durch Ausschneiden und Einfügen unterstützt werden.

Unsinn. Erstellen Sie einfach mehrere Dateien.

Ganzzahlen existieren anscheinend nicht als erstklassiger Typ.

Tun sie. Siehe int8, int16, int32und int64.

Die grundlegenden eingebauten Datenstrukturen scheinen viel zu hoch und schlecht dokumentiert zu sein und scheinen aufgrund meiner Erfahrung mit ähnlichen Datenstrukturen auf niedrigerer Ebene nie so zu funktionieren, wie ich es erwartet habe.

Sie eignen sich zur Datenanalyse. Bitte nennen Sie konkrete Beispiele für unerwartetes Verhalten.

Die Dokumentation ist über den gesamten Ort verteilt und praktisch nicht durchsuchbar. Sogar D, das oft für schlechte Dokumentation angeklopft wird und immer noch ziemlich alpha ist, ist, soweit ich das beurteilen kann, wesentlich besser.

Es gibt viele Arten von Dokumentationen. Beginnen Sie mit ?some_function, RSiteSearch('some concept'), rseek.org und das sosPaket. Ganz zu schweigen von den Handbüchern, die mit der Installation geliefert werden. Oder ein gutes Buch .

Zumindest soweit ich weiß, gibt es keine gute IDE dafür. Auch hier ist D, eine ziemlich alpha-artige Sprache mit einer kleinen Community, besser.

Probieren Sie Architect oder RStudio oder die Revolution Analytics-IDE aus. Links und weitere Optionen finden Sie im Abschnitt "IDEs und Editoren für R" auf der Seite " Informationen zum Stapelüberlauf".

Richie Cotton
quelle
3

MATLAB kann in Java und C / C ++ integriert werden. Sie können Ihre gesamte nicht numerische Arbeitslast in diesen Sprachen implementieren und sie von MATLAB aus aufrufen.

ihre Verwendung ist notwendig

Gibt es einen Grund, warum es notwendig ist? Arbeiten Sie an einer bestehenden MATLAB-Codebasis, die von anderen Leuten geschrieben wurde? Ist es eine Arbeitsanforderung? (oder Klassenanforderung, wenn Sie in der Schule sind) Wenn nicht, können Sie stattdessen SciPy oder NumPy verwenden.

Leider ist es meiner persönlichen Meinung nach nicht immer überlebensfähig, wenn diese Situation jemandem aufgezwungen wird. Selbst im College kann sich nicht jeder Ingenieurstudent an die MATLAB-Methode des rechnerischen Denkens gewöhnen.

rwong
quelle
2
Ich kenne diese Lösungen, aber sie scheinen ziemlich rückständig zu sein. Ich möchte MATLAB von C ++, Java usw. aufrufen, nicht umgekehrt. Ich möchte, dass alles andere als MATLAB meine "Fahrersprache" ist.
Dsimcha
2
@dsimcha können Sie MATLAB- und R-Bibliotheken von C aus aufrufen . Siehe mathworks.com/help/techdoc/matlab_external/f38569.html oder math.univ-montp2.fr/~pudlo/R_files/call_R.pdf
Charles E. Grant
0

Ich arbeite mit MATLAB, Python und C (und manchmal C ++) und betrachte mich als (hauptsächlich) Softwareentwickler, der Kollegen gegenübersteht, bei denen es sich in der Regel um Datenwissenschaftler, Mathematiker oder andere Fachleute handelt.

Obwohl ich als Erster zugeben würde, dass es sich nicht um eine Allzweck-Programmiersprache im Sinne von C oder Python handelt, schreibe ich Skripte sehr gerne in MATLAB, insbesondere für Dinge wie Zeitreihenanalyse oder Bildverarbeitung.

Es gibt einige Merkmale der Sprache, die zwar im Allgemeinen recht ineffizient implementiert sind, deren Verwendung jedoch Freude bereitet. Nehmen wir zum Beispiel die logische Indizierung: Ich kann einen logischen Vektor oder eine logische Matrix erstellen, die eine Region von Interesse auswählt, und sie als "isInROI" bezeichnen. Dabei führe ich eine Filteroperation aus, um Elemente aus den Vektor- oder Matrix- "Daten" in dieser Region auszuwählen dann einfach schreiben: "roiData = data (isInROI)".

Es sind Momente wie diese, die mich MATLAB wirklich schätzen lassen und mir erlauben, seine anderen, zahlreichen und viel diskutierten Sünden zu übersehen.

William Payne
quelle
Beachten Sie, dass numpy auch eine logische Indizierung hat: docs.scipy.org/doc/numpy/user/…
jarondl