{"id":3967,"date":"2019-10-25T14:13:50","date_gmt":"2019-10-25T12:13:50","guid":{"rendered":"https:\/\/medtech-ingenieur.de\/?p=3967"},"modified":"2021-08-06T14:36:41","modified_gmt":"2021-08-06T13:36:41","slug":"python-und-c-das-beste-aus-zwei-welten","status":"publish","type":"post","link":"https:\/\/medtech-ingenieur.de\/en\/python-und-c-das-beste-aus-zwei-welten\/","title":{"rendered":"Python and C# \u2013 The best of both worlds"},"content":{"rendered":"<p>Ziel dieses Artikels ist es zu zeigen, wie sich das .Net Framework und die Python Bibliotheken scipy und numpy sinnvoll verbinden lassen.<\/p>\n<p>Wer sich mit digitaler Signalverarbeitung (<abbr title=\"digitaler Signal Verarbeitung\">DSV<\/abbr>) besch\u00e4ftigt, wird zwangsl\u00e4ufig mit Python oder MatLab in Ber\u00fchrung kommen. Ich pers\u00f6nlich besch\u00e4ftige mich seit L\u00e4ngerem mit <abbr title=\"digitaler Signal Verarbeitung\">DSV<\/abbr> in Python und f\u00fchle mich vor allem wegen des Open Source Ansatzes sehr wohl damit.<br \/>\nBei Medtech Ingenieur habe ich angefangen mich n\u00e4her mit dem .Net Framework (C#) auseinanderzusetzen und bin von Visual Studio und den nahezu unendlichen M\u00f6glichkeiten begeistert.<br \/>\nMein Projekt war und ist es diese beiden Welten zu verbinden: professionelles Design von Grafischen Benutzeroberfl\u00e4chen (<abbr title=\"Grafischen Benutzeroberfl\u00e4chen\">GUI<\/abbr>); umfassendes Filterdesign.<\/p>\n<p>Ich werde in diesem Beitrag ein von uns entwickeltes Programm vorstellen, welches das Beste aus diesen beiden Welten verwendet. Au\u00dferdem werde ich eine kurze Anleitung bereitstellen, die es Ihnen erm\u00f6glicht in Ihrer .Net Anwendung Python zu verwenden.<\/p>\n<h2>Robustes, intuitives Filterdesign<\/h2>\n<p>Mit numpy und scipy Filter zu erzeugen und zu verwenden ist einfach. Den &#8222;perfekten&#8220; Filter f\u00fcr die Anwendung zu finden ist eine deutlich schwierigere Aufgabe. Das von uns entwickelte Programm erm\u00f6glicht es verschiedene Filterdesignmethoden auszuprobieren, ohne dabei Programmcode zu schreiben. Dabei liefert es zus\u00e4tzlich n\u00fctzliche Informationen zu den einzelnen Designmethoden, die es Ihnen erm\u00f6glichen Ihr Verst\u00e4ndnis f\u00fcr Filterdesign und <abbr title=\"digitaler Signal Verarbeitung\">DSV<\/abbr> zu vertiefen.<\/p>\n<figure id=\"attachment_3972\" aria-describedby=\"caption-attachment-3972\" style=\"width: 516px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3972\" src=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-300x285.png\" alt=\"\" width=\"516\" height=\"490\" srcset=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-300x285.png 300w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-768x731.png 768w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-100x95.png 100w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-150x143.png 150w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-200x190.png 200w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-450x428.png 450w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal-600x571.png 600w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/loaded-signal.png 848w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/a><figcaption id=\"caption-attachment-3972\" class=\"wp-caption-text\">Abbildung 1: <abbr title=\"Elektrokardiogramm\">EKG<\/abbr> Signal \u00fcberlagert mit 50 Hz Rausch(SNR -10 dB)<\/figcaption><\/figure>\n<p>In Abbildung 1 wurde ein stark verrauschtes <abbr title=\"Elektrokardiogramm\">EKG<\/abbr> Signal in den Filterdesigner geladen.<\/p>\n<figure id=\"attachment_3973\" aria-describedby=\"caption-attachment-3973\" style=\"width: 516px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3973\" src=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-300x178.png\" alt=\"\" width=\"516\" height=\"306\" srcset=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-300x178.png 300w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-768x455.png 768w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-100x59.png 100w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-150x89.png 150w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-200x118.png 200w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-450x266.png 450w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-600x355.png 600w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design-900x533.png 900w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png 988w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/a><figcaption id=\"caption-attachment-3973\" class=\"wp-caption-text\">Abbildung 2: Mithilfe des Filterdesigners wird ein Bandstoppfilter Implementiert<\/figcaption><\/figure>\n<p>Im Filterdesigner erzeugt man daher einen Bandstoppfilter. W\u00e4hrend des Designen kann man sich den Betrag und Phasengang des Filters anschauen. Au\u00dferdem wird das Pol-Nullstellen Diagramm gezeigt. (Abbildung 2)<br \/>\n(Wussten Sie z. B., dass die Polstellen von Linearphase Filtern immer im Ursprung liegen; die Nullstellen direkt auf dem Einheitskreis f\u00fcr den &#8222;Notch&#8220; verantwortlich sind?)<\/p>\n<figure id=\"attachment_3975\" aria-describedby=\"caption-attachment-3975\" style=\"width: 516px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3975\" src=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-300x286.png\" alt=\"\" width=\"516\" height=\"491\" srcset=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-300x286.png 300w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-768x731.png 768w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-100x95.png 100w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-150x143.png 150w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-200x190.png 200w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-450x428.png 450w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered-600x571.png 600w, https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filtered.png 850w\" sizes=\"auto, (max-width: 516px) 100vw, 516px\" \/><\/a><figcaption id=\"caption-attachment-3975\" class=\"wp-caption-text\">Abbildung 3: Gefiltertes Signal<\/figcaption><\/figure>\n<p>In Abbildung 3 kann jetzt das EKG Signal eindeutig erkannt werden. Nun k\u00f6nnte man weitere Filter hinzuf\u00fcgen, um z. B. den Gleichanteil herauszufiltern.<\/p>\n<h2>Wo stehen wir und wo wird es hingehen?<\/h2>\n<p>Aktuell ist nur das Design von Filtern mit linearer Phase m\u00f6glich. Diese haben eine konstante Gruppenlaufzeit. Deshalb ist das <abbr title=\"Elektrokardiogramm\">EKG<\/abbr> Signal auch noch als solches zu erkennen und ist nicht frequenzspezifisch verzerrt. Mittelfristig werden erweiterte M\u00f6glichkeiten zum Design von rekursiven Filtern hinzugef\u00fcgt.<br \/>\nIn Zukunft wird es au\u00dferdem m\u00f6glich sein automatisch C Code zu generieren, der die erstellten Filter auf einem Mikrocontroller implementiert.<\/p>\n<p>Bei Interesse und Anregungen, welche Funktionen f\u00fcr Sie von Bedeutung sein k\u00f6nnten melden Sie sich gerne bei mir.<\/p>\n<h2>Anleitung f\u00fcr Ihren Python Code im .Net Framework<\/h2>\n<p>Zu Beginn: Es k\u00f6nnte so einfach sein. Man k\u00f6nnte einfach Ironpython Code verwenden <a href=\"https:\/\/code-examples.net\/de\/q\/6b9f74\">(f\u00fcr eine Erkl\u00e4ung hier klicken)<\/a>. Da f\u00fcr <abbr title=\"digitaler Signal Verarbeitung\">DSV<\/abbr> die beiden cPython Bibliotheken numpy und scipy unabdinglich sind, kann der Code jedoch nicht einfach in C# ausgef\u00fchrt werden.<\/p>\n<p>Um cPython zu verwenden wird eine backend.py Datei entwickelt. Daraus wird dann eine backend.exe gebaut. Diese \u00fcbernimmt alle <abbr title=\"digitaler Signal Verarbeitung\">DSV<\/abbr> Aufgaben und wird von dem C# Code ausgef\u00fchrt. Das Gute an dieser L\u00f6sung ist, dass man automatisch dazu gezwungen wird,\u00a0 zwischen Frontend(C#) und Backend(Python) zu trennen.<\/p>\n<h3>Der Python Teil<\/h3>\n<p>Da der Visual Studio Debugger keine M\u00f6glichkeit hat, die main.exe zu debuggen, sollte hier darauf geachtet werden, dass man den Pythoncode unabh\u00e4ngig von der Hauptanwendung testen kann. Daf\u00fcr empfiehlt es sich in der backend.py zu Beginn abzufragen, ob C# Code oder eine Person die Anwendung ausf\u00fchrt. Dadurch kann w\u00e4hrend der Entwicklung im Python IDE der Wahl gedebugged werden.<\/p>\n<p>Dabei gilt es darauf zu achten, dass die backend.exe in einem anderen Verzeichnis liegen wird, als backend.py. Daher sollte zu Beginn alles behandelt werden, was sich durch die verschiedenen Aufrufvarianten ver\u00e4ndert. Am Ende von backend.py kann dann das ausgef\u00fchrt werden, was f\u00fcr alle Aufrufvarianten gleich abl\u00e4uft.<br \/>\nEin entsprechendes Codebeispiel ist unten zu finden. Eine Python Datei, die noch ein wenig mehr \u00fcbernimmt, ist <a href=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/backend.zip\">hier<\/a> zu finden.<\/p>\n<pre lang=\"python\">if __name__ == \"__main__\":\r\n \r\n    # Ohne Argumente vom Python IDE ausgef\u00fchrt \r\n    # (oder aus der cmd mit: python backend.py)\r\n    if len(sys.argv) == 1:\r\n        output_file = open(\".\\\\data_transfer\\\\outputsignal.txt\", \"w\")\r\n        a = \"no arguments\"\r\n \r\n    #aufgerufen mit .\\dist\\backend\\backend.exe \"write this text\"\r\n    elif sys.argv[1] == \"write this text\": \r\n        output_file = open(\".\\\\..\\\\..\\\\data_transfer\\\\outputsignal.txt\", \"w\")\r\n        a = sys.argv[1]\r\n \r\n    #aufgerufen mit .\\dist\\backend\\backend.exe \"write 1\"\r\n    elif sys.argv[1] == \"write 1\":\r\n        output_file = open(\".\\\\..\\\\..\\\\data_transfer\\\\outputsignal.txt\", \"w\")\r\n        a = \"1\"\r\n \r\n    #mit fehlerhaften Argumenten aufgerufen\r\n    else: \r\n        exit()\r\n\t\t\r\n    #der Programmcode der f\u00fcr alle Zweige gleich verl\u00e4uft\r\n    output_file.write(a)\r\n    output_file.close()\r\n<\/pre>\n<p>Nach erfolgreicher Implementierung des Backends kann pyinstaller aus der .py Datei eine .exe bauen, welche wir dann aus unserem C# Code ausf\u00fchren k\u00f6nnen.<\/p>\n<h3>Der C# Teil<\/h3>\n<p>Die aus backend.py erstellte backend.exe l\u00e4sst sich nun mit folgender C# Funktion aufrufen. Dabei \u00fcbergibt man die Argumente und erh\u00e4lt als R\u00fcckgabewert die stdout des Programms.<\/p>\n<pre lang=\"csharp\"> \r\n\/* @brief runs the command and returns the stdout as string\r\n   @param cmd name of the programm(backend.exe)\r\n   @param args all args that are given to the backend\r\n*\/\r\nprotected string run_cmd(string cmd, string[] args)\r\n        {\r\n            ProcessStartInfo start = new ProcessStartInfo();\r\n            start.FileName = string.Format(\"{0}{1}\", \"..\\\\..\\\\..\\\\Python_Backend\\\\dist\\\\\", cmd);\r\n\r\n            string arguments = \"\";\r\n\r\n            \/\/args need to be given in a single string (as you would type it to the cmd)\r\n            foreach (string arg in args)\r\n            {\r\n                arguments += \"\\\"\" + arg + \"\\\" \";\r\n            }\r\n            start.Arguments = arguments;\r\n            \/\/ Any output, generated by application \r\n            \/\/will be redirected back\r\n            start.RedirectStandardOutput = true;\r\n            \/\/ Any error in standard error stream will \r\n            \/\/be redirected back (for example exceptions)\r\n            start.RedirectStandardError = true; \r\n            using (Process process = Process.Start(start))\r\n            {\r\n                using (StreamReader reader = process.StandardOutput)\r\n                {\r\n                    string stderr = process.StandardError.ReadToEnd(); \r\n                    string result = reader.ReadToEnd(); \r\n                    return result;\r\n                }\r\n            }\r\n        }\r\n<\/pre>\n<h3>Die Daten\u00fcbertragung<\/h3>\n<p>Bleibt ein letztes Problem zu l\u00f6sen. Das \u00dcbertragen von Informationen zwischen Python und C#.<br \/>\nWas genau backend.exe tun soll, kann mithilfe der argv \u00fcbergeben werden. Statusupdates und Fehler der backend.exe k\u00f6nnen mithilfe des out und error Kanals zur\u00fcckgemeldet werden. Die Daten\u00fcbertragung muss jedoch aufgrund der limitierten L\u00e4nge der argv auf einem anderen Weg erfolgen. Daf\u00fcr k\u00f6nnen Signale in Form von .csv Dateien gespeichert oder mithilfe von .txt oder .json Dateien serialisiert werden.<\/p>\n<p>Sollten Sie Fragen zu den Code Beispielen haben, kontaktieren Sie mich gerne. Auch wenn Sie ein umfangreiches C# Programm haben, das eine Erweiterung um ein Python Backend vertragen k\u00f6nnte, kommen Sie gerne auf uns zu.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ziel dieses Artikels ist es zu zeigen, wie sich das .Net Framework und die Python Bibliotheken scipy und numpy sinnvoll verbinden lassen. Wer sich mit digitaler Signalverarbeitung (DSV) besch\u00e4ftigt, wird zwangsl\u00e4ufig mit Python oder MatLab in Ber\u00fchrung kommen. Ich pers\u00f6nlich besch\u00e4ftige mich seit L\u00e4ngerem mit DSV in Python und f\u00fchle mich vor allem wegen des [&hellip;]<\/p>\n","protected":false},"author":18,"featured_media":3973,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[376,377,134,378,375,379,374,380],"class_list":["post-3967","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-net","tag-c-code","tag-design","tag-dsv","tag-filter","tag-mumpy","tag-pyhton","tag-scipy","post-wrapper","thrv_wrapper"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Python und C# - Das Beste aus zwei Welten - MEDtech Ingenieur GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/medtech-ingenieur.de\/en\/python-und-c-das-beste-aus-zwei-welten\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python und C# - Das Beste aus zwei Welten - MEDtech Ingenieur GmbH\" \/>\n<meta property=\"og:description\" content=\"Ziel dieses Artikels ist es zu zeigen, wie sich das .Net Framework und die Python Bibliotheken scipy und numpy sinnvoll verbinden lassen. Wer sich mit digitaler Signalverarbeitung (DSV) besch\u00e4ftigt, wird zwangsl\u00e4ufig mit Python oder MatLab in Ber\u00fchrung kommen. Ich pers\u00f6nlich besch\u00e4ftige mich seit L\u00e4ngerem mit DSV in Python und f\u00fchle mich vor allem wegen des [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/medtech-ingenieur.de\/en\/python-und-c-das-beste-aus-zwei-welten\/\" \/>\n<meta property=\"og:site_name\" content=\"MEDtech Ingenieur GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/medtechIngenieur\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-25T12:13:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-06T13:36:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png\" \/>\n\t<meta property=\"og:image:width\" content=\"988\" \/>\n\t<meta property=\"og:image:height\" content=\"585\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"(Gast) Hinrich Rahlfs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@MedtechIng\" \/>\n<meta name=\"twitter:site\" content=\"@MedtechIng\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"(Gast) Hinrich Rahlfs\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/\"},\"author\":{\"name\":\"(Gast) Hinrich Rahlfs\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/person\\\/b02e4d0f12e17632070a067f6e739778\"},\"headline\":\"Python und C# &#8211; Das Beste aus zwei Welten\",\"datePublished\":\"2019-10-25T12:13:50+00:00\",\"dateModified\":\"2021-08-06T13:36:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/\"},\"wordCount\":889,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Filter_Design.png\",\"keywords\":[\".Net\",\"C-Code\",\"Design\",\"DSV\",\"Filter\",\"mumpy\",\"Pyhton\",\"scipy\"],\"articleSection\":[\"Software\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/\",\"name\":\"Python und C# - Das Beste aus zwei Welten - MEDtech Ingenieur GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Filter_Design.png\",\"datePublished\":\"2019-10-25T12:13:50+00:00\",\"dateModified\":\"2021-08-06T13:36:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#primaryimage\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Filter_Design.png\",\"contentUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/Filter_Design.png\",\"width\":988,\"height\":585},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/python-und-c-das-beste-aus-zwei-welten\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python und C# &#8211; Das Beste aus zwei Welten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#website\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\",\"name\":\"MEDtech Ingenieur GmbH\",\"description\":\"Ingenieursdienstleister f\u00fcr Medizintechnik\",\"publisher\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\"},\"alternateName\":\"MEDtech\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/medtech-ingenieur.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#organization\",\"name\":\"MEDtech Ingenieur\",\"alternateName\":\"MEDtech\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo-700x700-1.png\",\"contentUrl\":\"https:\\\/\\\/medtech-ingenieur.de\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/logo-700x700-1.png\",\"width\":700,\"height\":700,\"caption\":\"MEDtech Ingenieur\"},\"image\":{\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/medtechIngenieur\",\"https:\\\/\\\/x.com\\\/MedtechIng\",\"https:\\\/\\\/www.instagram.com\\\/medtech.ingenieure\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/37871229\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/medtech-ingenieur.de\\\/#\\\/schema\\\/person\\\/b02e4d0f12e17632070a067f6e739778\",\"name\":\"(Gast) Hinrich Rahlfs\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5e563e56678f5f0bf7fa32168998b31e18cc9bc988a3264556ac179a18d0b8?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5e563e56678f5f0bf7fa32168998b31e18cc9bc988a3264556ac179a18d0b8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9a5e563e56678f5f0bf7fa32168998b31e18cc9bc988a3264556ac179a18d0b8?s=96&d=mm&r=g\",\"caption\":\"(Gast) Hinrich Rahlfs\"},\"description\":\"Hinrich Rahlfs arbeitete als Werkstudent bei MEDtech Ingenieur. Seine Aufgabengebiete umfassten das Programmieren grafischer Benutzeroberfl\u00e4chen und das Entwickeln eines intuitiven Filterdesign-Tools.\",\"sameAs\":[\"https:\\\/\\\/www.medtech-ingenieur.de\"],\"url\":\"https:\\\/\\\/medtech-ingenieur.de\\\/en\\\/author\\\/hrahlfs\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Python und C# - Das Beste aus zwei Welten - MEDtech Ingenieur GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/medtech-ingenieur.de\/en\/python-und-c-das-beste-aus-zwei-welten\/","og_locale":"en_US","og_type":"article","og_title":"Python und C# - Das Beste aus zwei Welten - MEDtech Ingenieur GmbH","og_description":"Ziel dieses Artikels ist es zu zeigen, wie sich das .Net Framework und die Python Bibliotheken scipy und numpy sinnvoll verbinden lassen. Wer sich mit digitaler Signalverarbeitung (DSV) besch\u00e4ftigt, wird zwangsl\u00e4ufig mit Python oder MatLab in Ber\u00fchrung kommen. Ich pers\u00f6nlich besch\u00e4ftige mich seit L\u00e4ngerem mit DSV in Python und f\u00fchle mich vor allem wegen des [&hellip;]","og_url":"https:\/\/medtech-ingenieur.de\/en\/python-und-c-das-beste-aus-zwei-welten\/","og_site_name":"MEDtech Ingenieur GmbH","article_publisher":"https:\/\/www.facebook.com\/medtechIngenieur","article_published_time":"2019-10-25T12:13:50+00:00","article_modified_time":"2021-08-06T13:36:41+00:00","og_image":[{"width":988,"height":585,"url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png","type":"image\/png"}],"author":"(Gast) Hinrich Rahlfs","twitter_card":"summary_large_image","twitter_creator":"@MedtechIng","twitter_site":"@MedtechIng","twitter_misc":{"Written by":"(Gast) Hinrich Rahlfs","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#article","isPartOf":{"@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/"},"author":{"name":"(Gast) Hinrich Rahlfs","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/person\/b02e4d0f12e17632070a067f6e739778"},"headline":"Python und C# &#8211; Das Beste aus zwei Welten","datePublished":"2019-10-25T12:13:50+00:00","dateModified":"2021-08-06T13:36:41+00:00","mainEntityOfPage":{"@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/"},"wordCount":889,"commentCount":0,"publisher":{"@id":"https:\/\/medtech-ingenieur.de\/#organization"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#primaryimage"},"thumbnailUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png","keywords":[".Net","C-Code","Design","DSV","Filter","mumpy","Pyhton","scipy"],"articleSection":["Software"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/","url":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/","name":"Python und C# - Das Beste aus zwei Welten - MEDtech Ingenieur GmbH","isPartOf":{"@id":"https:\/\/medtech-ingenieur.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#primaryimage"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#primaryimage"},"thumbnailUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png","datePublished":"2019-10-25T12:13:50+00:00","dateModified":"2021-08-06T13:36:41+00:00","breadcrumb":{"@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#primaryimage","url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png","contentUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2019\/10\/Filter_Design.png","width":988,"height":585},{"@type":"BreadcrumbList","@id":"https:\/\/medtech-ingenieur.de\/python-und-c-das-beste-aus-zwei-welten\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/medtech-ingenieur.de\/"},{"@type":"ListItem","position":2,"name":"Python und C# &#8211; Das Beste aus zwei Welten"}]},{"@type":"WebSite","@id":"https:\/\/medtech-ingenieur.de\/#website","url":"https:\/\/medtech-ingenieur.de\/","name":"MEDtech Ingenieur GmbH","description":"Engineering service provider for medical technology","publisher":{"@id":"https:\/\/medtech-ingenieur.de\/#organization"},"alternateName":"MEDtech","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/medtech-ingenieur.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/medtech-ingenieur.de\/#organization","name":"MEDtech Engineer","alternateName":"MEDtech","url":"https:\/\/medtech-ingenieur.de\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/logo\/image\/","url":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2024\/01\/logo-700x700-1.png","contentUrl":"https:\/\/medtech-ingenieur.de\/wp-content\/uploads\/2024\/01\/logo-700x700-1.png","width":700,"height":700,"caption":"MEDtech Ingenieur"},"image":{"@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/medtechIngenieur","https:\/\/x.com\/MedtechIng","https:\/\/www.instagram.com\/medtech.ingenieure\/","https:\/\/www.linkedin.com\/company\/37871229\/"]},{"@type":"Person","@id":"https:\/\/medtech-ingenieur.de\/#\/schema\/person\/b02e4d0f12e17632070a067f6e739778","name":"(Guest) Hinrich Rahlfs","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/9a5e563e56678f5f0bf7fa32168998b31e18cc9bc988a3264556ac179a18d0b8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9a5e563e56678f5f0bf7fa32168998b31e18cc9bc988a3264556ac179a18d0b8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9a5e563e56678f5f0bf7fa32168998b31e18cc9bc988a3264556ac179a18d0b8?s=96&d=mm&r=g","caption":"(Gast) Hinrich Rahlfs"},"description":"Hinrich Rahlfs worked as a student engineer at MEDtech. His responsibilities included programming graphical user interfaces and developing an intuitive filter design tool.","sameAs":["https:\/\/www.medtech-ingenieur.de"],"url":"https:\/\/medtech-ingenieur.de\/en\/author\/hrahlfs\/"}]}},"_links":{"self":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/3967","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/users\/18"}],"replies":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/comments?post=3967"}],"version-history":[{"count":39,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/3967\/revisions"}],"predecessor-version":[{"id":5813,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/posts\/3967\/revisions\/5813"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/media\/3973"}],"wp:attachment":[{"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/media?parent=3967"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/categories?post=3967"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/medtech-ingenieur.de\/en\/wp-json\/wp\/v2\/tags?post=3967"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}