From 800b9bfbd76a7f1d6214d0e6bb348c6e653f68a0 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Thu, 15 Oct 2015 18:10:25 +0200 Subject: [PATCH] structs and cells --- .../exercises/Wetterdaten_Helgoland.txt | 19 ++ .../exercises/Wetterdaten_Helgoland.xlsx | Bin 0 -> 6073 bytes programming/exercises/structs_cells.tex | 77 ++++++++ programming/lectures/data_structures.tex | 181 ++++++++++++++++-- .../lectures/images/simple_program.pdf | Bin 0 -> 6860 bytes programming/lectures/scripts_functions.tex | 31 ++- 6 files changed, 291 insertions(+), 17 deletions(-) create mode 100644 programming/exercises/Wetterdaten_Helgoland.txt create mode 100644 programming/exercises/Wetterdaten_Helgoland.xlsx create mode 100644 programming/exercises/structs_cells.tex create mode 100644 programming/lectures/images/simple_program.pdf diff --git a/programming/exercises/Wetterdaten_Helgoland.txt b/programming/exercises/Wetterdaten_Helgoland.txt new file mode 100644 index 0000000..0a84510 --- /dev/null +++ b/programming/exercises/Wetterdaten_Helgoland.txt @@ -0,0 +1,19 @@ + STAT JJJJMM QN TNN TNM TMM TXM TXX SOS NMM RSS RSX FMM FXX +10015 201509 1 12.3 13.7 15.3 16.9 18.7 151.3 -9.9 74.0 10.6 4.6 27.1 +10015 201508 3 13.8 16.3 18.1 20.1 23.6 199.0 -9.9 108.5 26.6 -9.9 20.9 +10015 201507 3 12.1 14.6 16.6 18.8 25.9 237.9 5.1 83.2 13.1 4.4 25.3 +10015 201506 3 9.9 11.6 13.5 15.7 20.0 221.3 -9.9 -9.9 5.6 3.9 22.8 +10015 201505 3 6.6 8.6 10.3 12.3 16.6 216.7 5.4 49.5 10.1 4.3 23.7 +10015 201504 3 1.4 5.7 7.5 9.4 11.7 233.6 4.9 15.1 4.1 4.0 24.6 +10015 201503 3 1.5 4.0 5.6 7.1 9.5 141.4 5.8 73.5 16.3 4.5 30.9 +10015 201502 3 -0.2 2.6 3.9 5.2 7.2 88.4 5.6 45.5 8.6 4.6 25.2 +10015 201501 3 -1.5 3.0 4.9 6.3 9.8 51.7 5.8 103.1 15.8 5.3 30.6 +10015 201412 3 -1.4 4.0 5.9 7.4 10.5 34.5 6.4 150.5 32.5 5.5 30.2 +10015 201411 3 0.5 8.5 9.6 10.7 15.8 51.1 6.4 22.9 6.4 5.0 24.3 +10015 201410 3 9.4 13.1 14.5 15.8 18.8 92.3 5.9 82.5 22.6 4.5 27.2 +10015 201409 3 9.8 15.2 16.9 18.7 22.2 164.4 4.6 31.4 7.9 4.3 21.7 +10015 201408 3 10.9 15.1 17.4 19.5 25.2 212.2 5.2 190.3 47.3 4.4 25.2 +10015 201407 3 12.7 17.5 19.5 22.2 25.9 285.0 4.5 54.6 23.6 3.7 17.5 +10015 201406 3 11.3 13.3 15.2 17.6 22.2 247.6 4.9 31.0 8.0 3.8 17.7 +10015 201405 3 7.2 10.1 12.0 14.3 20.7 211.8 5.5 58.0 12.4 3.9 20.4 +10015 201404 3 4.5 7.7 9.5 12.0 16.7 185.4 5.2 32.8 10.1 4.3 23.4 diff --git a/programming/exercises/Wetterdaten_Helgoland.xlsx b/programming/exercises/Wetterdaten_Helgoland.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..02c5f07c64adf7fb8241ca59cfb8f7e0d6e18283 GIT binary patch literal 6073 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 a&EtP4K@AlQ%-ccOH { @@ -68,7 +68,7 @@ language=Matlab, commentstyle=\itshape\color{darkgray}, keywordstyle=\color{blue}, - stringstyle=\color{green}, + stringstyle=\color{stringcolor}, backgroundcolor=\color{blue!10}, breaklines=true, breakautoindent=true, @@ -101,32 +101,142 @@ \huge{1. Fortgeschrittene Datenstrukturen} \end{frame} +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \large + Bisher kennen wir folgende Datenstrukturen: + \begin{enumerate} + \item Skalare. + \item Vektoren. + \item Matrizen. + \end{enumerate}\pause + F\"ur die meisten F\"alle reicht das aus. Manchmal m\"ochte man aber + Dinge gemeinsam ablegen, die nicht den gleichen Datentyp haben. + \pause\\ + + Beispiel: Ich habe eine Reihe Versuchspersonen bei denen ich + verschiede Parameter (Alter, Geschlecht) zusammen mit den + Testergebnissen ablegen m\"ochte. +\end{frame} + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \only<1> { + F\"ur diese Zwecke kennt MATLAB vier weitere Datenstrukturen: + \begin{enumerate} + \item Strukturen. + \item Cell Arrays. + \item Tabellen (neu seit 2013). + \item Objekte. + \end{enumerate} + } + \only <2> { + F\"ur diese Zwecke kennt MATLAB \st{vier} \textbf{drei} weitere Datenstrukturen: + \begin{enumerate} + \item Strukturen. + \item Cell Arrays. + \item Tabellen (neu seit 2013). + \item \st{Objekte.} + \end{enumerate} + } +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \huge{Strukturen} +\end{frame} \begin{frame}[fragile] \frametitle{Fortgeschrittene Datenstrukturen} - \framesubtitle{Strukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} \begin{itemize} \item Strukturen werden benutzt um beliebige zusammengeh\"orige Daten in sog. Kontainern zu speichern. - \item Diese Daten k\"onnen über den Namen des Kontainers oder + \item Diese Daten k\"onnen \"uber den Namen des Kontainers oder ``Feldes'' angesprochen werden. \item Man kann Listen von diesen Strukturen haben. \end{itemize} \end{frame} - \begin{frame}[fragile] \frametitle{Fortgeschrittene Datenstrukturen} \framesubtitle{Strukturen} Beispiel: - + \footnotesize + \begin{lstlisting} + subjects(1).name = 'John Dow'; + subjects(1).age = 35; + subjects(1).sex = 'm'; + subjects(1).results = [1 2 3 4 5]; + + subjects(2).name = 'Jane Smith'; + subjects(2).age = 32; + subjects(2).sex = 'f'; + subjects(2).results = [1 2 3 4 5]; + + fieldnames(subjects) + ans = + 'name' + 'age' + 'sex' + 'results' + \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Fortgeschrittene Datenstrukturen} - \framesubtitle{Navigieren im Dateisystem} - + \framesubtitle{Strukturen} + Beispiel: + \footnotesize + \begin{lstlisting} + subjects(1).name + ans = + 'John Doe' + + subjects(1).test2 = []; + fieldname(subjects(2)) + ans = + 'name' + 'age' + 'sex' + 'results' + 'test2' + \end{lstlisting} +\end{frame} + + + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Strukturen} + \textbf{Vorteile:} + \begin{enumerate} + \item Strukturen koennen beliebige Werte aufnehmen. + \item Man kann Listen von Strukturen erstellen und darauf + indizieren. + \item Sind sehr leicht lesbar. + \item Addressieren von Feldern ist sehr intuitiv. + \end{enumerate} + \pause + \vspace{1cm} + \textbf{Nachteile:} + \begin{enumerate} + \item Alle Eintr\"age in einer Strukturliste m\"ussen gleichgefromt + sein. + \item Kein logisches Indizieren. + \item Elemente der Strukturen m\"ussen \"uber den Feldnamen + angesprochen werden. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \huge{Cell Arrays} \end{frame} @@ -134,9 +244,9 @@ \frametitle{Fortgeschrittene Datenstrukturen} \framesubtitle{Cell Arrays} \begin{enumerate} - \item Matrizen k\"onnen nur rechtwinklig sein.\pause + \item Matrizen k\"onnen nur rechtwinklig sein. \item Manchmal hat man aber unterschiedlich viele Datenpunkte, die - dennoch logisch zusammengeh\"oren.\pause + dennoch logisch zusammengeh\"oren. \item Z.B. Wenn man Zeitpunkte von Neuronalen- oder Verhaltensereignissen hat. \end{enumerate} \end{frame} @@ -164,4 +274,51 @@ \end{lstlisting} \end{frame} + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Cell Arrays} + \textbf{Vorteile:} + \begin{enumerate} + \item Kann alle m\"oglichen Daten ablegen. + \item Benutzung m\"oglich ohne Kenntnis von Feldnamen. + \end{enumerate}\pause + \vspace{1cm} + \textbf{Nachteile:} + \begin{enumerate} + \item Manchmal un\"ubersichtlich. + \item Adressieren mit ${}$ ist eher ungew\"ohnlich. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{``Strukturen'' und ``Cell Arrays''} + \huge{Tabellen} +\end{frame} + +\begin{frame} + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Tabellen} + \begin{enumerate} + \item Datenstruktur \"ahnlich zu Excel Tabellen. + \item Jede Spalte ist eine Kategorie. + \item Verschiedene Spalten k\"onnen unterschiedliche Datentypen + haben. + \item Unterst\"utzung von Filteroperationen auf Spalten und Zeilen. + \item Kann direkt \textit{*.xlsx} Dateien importieren. + \end{enumerate} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Fortgeschrittene Datenstrukturen} + \framesubtitle{Tabellen} + \scriptsize + \begin{lstlisting} + + \end{lstlisting} +\end{frame} + + + \end{document} \ No newline at end of file diff --git a/programming/lectures/images/simple_program.pdf b/programming/lectures/images/simple_program.pdf new file mode 100644 index 0000000000000000000000000000000000000000..854b7875a7c4cbf756856d1703b63a4a55c4eda2 GIT binary patch literal 6860 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