kennen:include:valarray
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | kennen:include:valarray [2012-02-24 15:15] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== < | ||
+ | ==== Vektor-Arithmetik ==== | ||
+ | Für Gleitkommaberechnungen mit großen Datenmengen wurde '' | ||
+ | entworfen. Auf entsprechenden Maschinen können diese Operationen | ||
+ | besonders effizient ausgeführt werden. | ||
+ | Einfache eindimensionale Zahlenfelder sind die Grundlage solcher Berechnungen. | ||
+ | Der Typ '' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Konstruktoren | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | <code cpp> | ||
+ | double arr[] = {0, | ||
+ | std:: | ||
+ | </ | ||
+ | Der Indexzugriff wählt ein oder mehrere Elemente aus. | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | Zuweisungen sind | ||
+ | aus '' | ||
+ | '' | ||
+ | als auch zu Teilmengen möglich. | ||
+ | |||
+ | Verbundoperatoren wie '' | ||
+ | Es werden auch die üblichen zweistelligen Operatoren | ||
+ | und mathematischen Funktionen aus [[cmath]] angeboten. | ||
+ | Die zweistelligen Operationen sind für Valarrays mit gleicher Elementanzahl | ||
+ | und für Kombinationen von Valarray mit Skalaren definiert. | ||
+ | |||
+ | <code cpp> | ||
+ | std:: | ||
+ | std:: | ||
+ | std:: | ||
+ | </ | ||
+ | Die Doppelpfeiloperatoren dienen nur als Schiebeoperatoren. | ||
+ | Ein- und Ausgabe-Operatoren sind nicht definiert. | ||
+ | |||
+ | Methoden | ||
+ | |||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | Durch Slices '' | ||
+ | ein eindimensionales Feld als Matrix mit beliebig vielen Dimensionen zu betrachten, | ||
+ | z.B. ein 12elementiges Feld als Matrix aus 3 Zeilen mit je 4 Spalten | ||
+ | |||
+ | <code cpp> | ||
+ | ( 0 1 2 3 ) | ||
+ | ( 4 5 6 7 ) [ 0 1 2 3 4 5 6 7 8 9 10 11 ] | ||
+ | ( 8 9 10 11 ) | ||
+ | </ | ||
+ | Von diesem Feld soll eine Spalte oder eine Zeile ausgewählt werden. | ||
+ | Mit '' | ||
+ | '' | ||
+ | und '' | ||
+ | |||
+ | <code cpp> | ||
+ | int start=0, size=3, stride=4; | ||
+ | std::slice s(start, size, stride); // Elemente [0] [4] [8] = linke Spalte | ||
+ | </ | ||
+ | Ein Slice ist eine Folge von Ganzzahlwerten, | ||
+ | die als Indexfolge in einem Valarray dienen. | ||
+ | |||
+ | <code cpp> | ||
+ | v[std:: | ||
+ | </ | ||
+ | Manchmal muss man einen Teilbereich ansprechen, der keine Zeile oder Spalte ist, | ||
+ | z.B. die rechte untere 2x3-Teilmatrix. | ||
+ | Dazu sind 2 Länge-Abstand-Paare erforderlich. | ||
+ | |||
+ | <code cpp> | ||
+ | size_t start = 5; | ||
+ | size_t len [] = { 3, 2 }; // 3 Spalten, 2 Zeilen | ||
+ | size_t abst[] = { 1, 4 }; // Abstand 1, Abstand 4 | ||
+ | </ | ||
+ | Verallgemeinerte Slices '' | ||
+ | |||
+ | <code cpp> | ||
+ | std:: | ||
+ | std:: | ||
+ | std::gslice g(start, laengen, abstaende); | ||
+ | v[g] = 0; | ||
+ | </ | ||
+ | Masken aus Feldern von booleschen Werten sind eine weitere Möglichkeit, | ||
+ | Elemente auszuwählen, | ||
+ | |||
+ | <code cpp> | ||
+ | bool b[] = { true, false, false, true, true }; | ||
+ | std:: | ||
+ | v[maske] *= 2; | ||
+ | </ | ||
+ | Mit indirekten Arrays können beliebige Elemente in beliebiger Folge ausgewählt und umsortiert werden. | ||
+ | |||
+ | <code cpp> | ||
+ | size_t i[] = {0, 8, 11, 3}; | ||
+ | std:: | ||
+ | std:: | ||
+ | </ | ||
+ | Die Indizierung mit Slices, Masken und indirekten Arrays muss so erfolgen, | ||
+ | dass in einem Ausdruck auf kein Element zweifach Bezug genommen wird: | ||
+ | |||
+ | <code cpp> | ||
+ | v[mask] = v[index]; // nicht erlaubt! | ||
+ | </ | ||
+ | Diese Art Aliasing führt zu undefiniertem Verhalten. | ||
kennen/include/valarray.txt · Zuletzt geändert: 2012-02-24 15:15 von 127.0.0.1