1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe...
-
Upload
kunibert-naiser -
Category
Documents
-
view
112 -
download
0
Transcript of 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe...
![Page 1: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/1.jpg)
1
Blitz++
Stefan Kofler
99 30 502
![Page 2: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/2.jpg)
2
Was ist Blitz++
Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell
![Page 3: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/3.jpg)
3
Unterstützte Compiler
gcc GNU C++ compiler für Linux Unter Win Cyg-Win32. VS .NET 2003 KAI C++ für Win und Linux Metrowerks Codewarrior DEC cxx V6.0-010 or better Cray C++ 3.0, aber mit schlechter Performance SGI C++ 7.3
![Page 4: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/4.jpg)
4
Arrays
![Page 5: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/5.jpg)
5
Arrays
2 Parameter: T_Numtype N_rank Bsp: Array<int, 1> Eindim. Integer
Array<double, 2> Matrix aus doubles
Array<double, 2> y(4,4) 4x4 Matrix
![Page 6: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/6.jpg)
6
Arrays initialisieren
Array<double, 2> y(4,4)y = 0;
y = 1, 0, 0, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1;
![Page 7: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/7.jpg)
7
Arten von Arrays
Scalars user defined types TinyVector, TinyArray (fixe Größe) Nested Arrays
Bsp: Array<Array<int, 1>,1>
![Page 8: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/8.jpg)
8
Bsp:
#include <blitz/array.h>using namespace blitz;int main(){ Array<float,2> A(3,3), B(3,3), C(3,3); A = 1, 0, 0, 2, 2, 2, 1, 0, 0; B = 0, 0, 7, 0, 8, 0, 9, 9, 9; C = A + B;
cout << "A = " << A << endl << "B = " << B << endl << "C = " << C << endl;
return 0;}
![Page 9: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/9.jpg)
9
Bsp, Output
A = 3 x 3 1 0 0 2 2 2 1 0 0
B = 3 x 3 0 0 7 0 8 0 9 9 9
C = 3 x 3 1 0 7 2 10 2 10 9 9
![Page 10: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/10.jpg)
10
Konstruktoren
Array(); Array(expression)
Bsp: Array<float, 2> A(4,3), B(4,3);
Array(Range r1, Range r2)Bsp: Array<int, 2> A(Range(10,20), Range(20,30))
Array(Array(T_numtype, N_rank>& array)
![Page 11: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/11.jpg)
11
Indexing, Slicing, Subarrays
![Page 12: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/12.jpg)
12
Range
Array<int,1> A(7); A = 0, 1, 2, 3, 4, 5, 6;
cout << A(Range::all()) << endl // [ 0 1 2 3 4 5 6 ] << A(Range(3,5)) << endl // [ 3 4 5 ] << A(Range(3,toEnd)) << endl // [ 3 4 5 6 ] << A(Range(fromStart,3)) << endl // [ 0 1 2 3 ] << A(Range(1,5,2)) << endl // [ 1 3 5 ] << A(Range(5,1,-2)) << endl // [ 5 3 1 ] << A(Range(fromStart,toEnd,2)) << endl; // [ 0 2 4 6 ]
![Page 13: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/13.jpg)
13
Indexing
Wie bei Arrays üblich, nur runde KlammerBsp: A(7,0,0) = 5;
Wenn Array const: return type ist Value Wenn Array nicht const: return type Referenz
![Page 14: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/14.jpg)
14
Subarrays
Array<int,3> B = A(Range(5,7), Range(5,7), Range(0,2));
B referenziert nun (5..7,5..7,0..2) von A. Return Type ist Array<int, 3>
![Page 15: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/15.jpg)
15
Slicing
Array<int,2> F = A(Range::all(), 2, Range::all());
Array<int,1> G = A(2, 7, Range::all());
![Page 16: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/16.jpg)
16
Slicing
![Page 17: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/17.jpg)
17
Index 0 vs. Index 1
Arrays in C/C++ starten mit 0 Arrays in Fortran mit 1 0tes Element für manche komisch Lösung
const int firstDim = 0;const int secondDim = 1;usw.
![Page 18: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/18.jpg)
18
Index 0 vs. Index 1
Index kann auch gesetzt werden auch für jede Dim verschieden
Array<int, 2> A(Range(1,10), Range(0,9))
![Page 19: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/19.jpg)
19
Input Output Format
![Page 20: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/20.jpg)
20
Output Bsp
#include <blitz/array.h>using namespace blitz;int main(){ Array<int,2> A(4,5,FortranArray<2>()); firstIndex i; secondIndex j; A = 10*i + j; cout << "A = " << A << endl; Array<float,1> B(20); B = exp(-i/100.); cout << "B = " << endl << B << endl; return 0;}
![Page 21: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/21.jpg)
21
Output Bsp
A = 4 x 5
[ 11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45 ]
B = 20
[ 1 0.99005 0.980199 0.970446 0.960789 0.951229 0.941765
0.932394 0.923116 0.913931 0.904837 0.895834 0.88692 0.878095
0.869358 0.860708 0.852144 0.843665 0.83527 0.826959 ]
![Page 22: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/22.jpg)
22
Input von Array
Array muss wie Output sein Größen und Dimensionsangeben „[„ für Start „]“ für Ende
![Page 23: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/23.jpg)
23
Array Expressions
![Page 24: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/24.jpg)
24
Einfachheit
Array<int,1> A, B, C, D;
A = B + C + D;
entspricht:
for (int i=A.lbound(firstDim); i <= A.ubound(firstDim); ++i)
A[i] = B[i] + C[i] + D[i];
![Page 25: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/25.jpg)
25
Expression Operators
+ - * / % > < >= <= == != && || ^ & | Bsp für Bitweise XOR
Array<float,1> A, B, C; C = B ^ C;
![Page 26: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/26.jpg)
26
Index Placeholder
Array<float,1> A(10);firstIndex i;A = i;
entsprichtfor (int i=0; i < A.length(); ++i) A(i) = i;
Auch möglich:Array<float,1> A(16);firstIndex i;A = sin(2 * M_PI * i / 16.);
![Page 27: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/27.jpg)
27
Index Placeholder
Array<float,2> F(64,64);float midpoint = (N-1)/2.;int cycles = 3;float omega = 2.0 * M_PI * cycles / double(N);float tau = - 10.0 / N;
// Index placeholdersfirstIndex i;secondIndex j;
// Fill the arrayF = cos(omega * sqrt(pow2(i-midpoint) + pow2(j-midpoint))) * exp(tau * sqrt(pow2(i-midpoint) + pow2(j-midpoint)));
![Page 28: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/28.jpg)
28
Index Placeholder
![Page 29: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/29.jpg)
29
Casten
Int-Divisions Problem bei Scalar und Arrays
Array<int,1> A(4), B(4);Array<float,1> C(4);A = 1, 2, 3, 5;B = 2, 2, 2, 7;C = A / B; // Result: [ 0 1 1 0 ]
Lösung
C = A / cast(B, float()); // Result: [ 0.5 1 1.5 0.714 ]
![Page 30: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/30.jpg)
30
Tensor notation
![Page 31: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/31.jpg)
31
Tensor notation
Programmfragment:Array<float,1> x(4), y(4); Array<float,2> A(4,4); x = 1, 2, 3, 4; y = 1, 0, 0, 1; firstIndex i; secondIndex j; A = x(i) * y(j);
cout << A << endl;
return 0;
Output:4 x 4 1 0 0 1 2 0 0 2 3 0 0 3 4 0 0 4
![Page 32: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/32.jpg)
32
Reduktionen
Volle Reduktionsum(), product(), min(), max()...
Teilweise Reduktionsum(A,j), product(A,j)...
![Page 33: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/33.jpg)
33
Reduktion
![Page 34: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/34.jpg)
34
Where Statement
Führt Operation nur an gewissen Stellen auswhere(array-expr1, array-expr2, array-expr3)
Bsp: Nur positive Zahlen quadrieren, sonst 0 setzen & summieren
double posSquareSum = sum(where(A > 0, pow2(A), 0));
![Page 35: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/35.jpg)
35
Indirection
= Möglichkeit, an bestimter Stelle im Array zuzugreifen
2 Möglichkeiten:
![Page 36: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/36.jpg)
36
1. Liste von Arraypositionen
Array<int,1> A(5), B(5); A = 0; B = 1, 2, 3, 4, 5;
vector<int> I; I.push_back(2); I.push_back(4); I.push_back(1);
A[I] = B;After this code, the array A contains [ 0 2 3 0 5 ].
![Page 37: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/37.jpg)
37
Liste von Arraypositionen
enspricht:
for (int i = 0; i < I.length; i++) {
int x = I[i];
A[x] = B[x];
}
![Page 38: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/38.jpg)
38
2. Cartesisches Produkt
Array<int,2> A(6,6), B(6,6);firstIndex i;secondIndex j A = 0;B = 10*i + j;
vector<int> I, J; I.push_back(1); I.push_back(2); I.push_back(4); J.push_back(0); J.push_back(2); J.push_back(5); A[indexSet(I,J)] = B;
After this code, the A array contains:
0 0 0 0 0 010 0 12 0 0 1520 0 22 0 0 25 0 0 0 0 0 040 0 42 0 0 45 0 0 0 0 0 0
![Page 39: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/39.jpg)
39
Tiny Vector
![Page 40: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/40.jpg)
40
Was ist Tiny Vector
Kleine, leichte Klasse für kl. Vectoren Größe zu Kompilezeit bekannt Schnell und effizient TinyVector<T,N>
T = Typ N = Größe
![Page 41: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/41.jpg)
41
Geschwindigkeit
![Page 42: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/42.jpg)
42
Parallel rechnen mit Bliz++
![Page 43: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/43.jpg)
43
Parallel rechnen
Nicht Hauptaugenmerk aber möglich POOMA besser geeignet
![Page 44: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/44.jpg)
44
Random Number Generator
![Page 45: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/45.jpg)
45
RNG
Uniform [0,1) Normal: Normalverteilt, Mittelwert und
Varianz Exponentiell: mit spezifischem Mittelwert Diskret: Integer innerhalb Range Beta, Gamma, und F verteilt
![Page 46: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/46.jpg)
46
Zusammenfassung
Blitz++ ist schnell bietet viele Funktionen spart Sourcecode ist nicht fertig (Version 0.8) Dokumentation teilweise Lückenhaft
![Page 47: 1 Blitz++ Stefan Kofler 99 30 502. 2 Was ist Blitz++ Arrays bis 11 Dimensionen Numerisch Größe muss nicht bekannt sein schnell.](https://reader035.fdocuments.net/reader035/viewer/2022062318/55204d7649795902118cac49/html5/thumbnails/47.jpg)
47
Danke für die Aufmerksamkeit
~ENDE~