tobiii
Aktives Mitglied
Thread Starter
- Dabei seit
- 20.05.2006
- Beiträge
- 1.226
- Reaktionspunkte
- 40
Hallo Leute!
Habe gerade ein paar Tage Zeit und dachte mir, ich lese mich mal in die Gründzüge von Objective-C ein. Als kleines Projekt wollte ich ein paar wissenschaftliche Algorithmen implementieren und ein bisschen mit Zellulären Automaten spielen. Die meisten Programme liegen bisher in MATLAB oder auch Python vor. Da es keine "mitgelieferte" Matrix-Klasse gibt, meine ich, dass dies eine gute Gelegenheit wäre, die erste eigene Objective-C Klasse zu schreiben.
Bevor ich jetzt aber hier noch viel mehr Zeit rein versenkte dachte ich mir, ich frage mal hier im Forum nach, ob jemand mit mehr Erfahrung vielleicht Lust hat, mal kurz über meine Implementierung drüber zu schauen und nach besonders schlimmen (Performance-) Sünden ausschau zu halten.
Hier ist meine Matrix.m:
Das ganze gibts etwas übersichtlicher auch hier:
http://pastie.org/private/k8tgjqviu4y3x0mrnkrrpw
Eventuell brauche ich später noch eine 3D-Matrix, ich hätte diese jetzt einfach aus einem neuen NSMutableArray gebaut, in das ich meine Matrizen rein pflanze und eine neue Zugriffs-Methode dazu schreibe, denkt ihr, dass durch diese vorgehensweise der Code zu langsam wird?
Vielen Dank schonmal im Voraus für eure Anregungen!
Habe gerade ein paar Tage Zeit und dachte mir, ich lese mich mal in die Gründzüge von Objective-C ein. Als kleines Projekt wollte ich ein paar wissenschaftliche Algorithmen implementieren und ein bisschen mit Zellulären Automaten spielen. Die meisten Programme liegen bisher in MATLAB oder auch Python vor. Da es keine "mitgelieferte" Matrix-Klasse gibt, meine ich, dass dies eine gute Gelegenheit wäre, die erste eigene Objective-C Klasse zu schreiben.
Bevor ich jetzt aber hier noch viel mehr Zeit rein versenkte dachte ich mir, ich frage mal hier im Forum nach, ob jemand mit mehr Erfahrung vielleicht Lust hat, mal kurz über meine Implementierung drüber zu schauen und nach besonders schlimmen (Performance-) Sünden ausschau zu halten.
Hier ist meine Matrix.m:
Code:
@implementation Matrix
// generate empty matrix with size y X x
-(id)initWithY:(int)y X:(int)x{
[super init];
ymax=y;
xmax=x;
M = [[NSMutableArray arrayWithCapacity:y*x] init];
return self;
}
// generate zero Matrix with size y X x
-(id)zerosWithY:(int)y X:(int)x{
[self initWithY:y X:x];
for(int i=0; i<ymax*xmax; i++){
[M addObject:[NSNumber numberWithDouble:0]];
}
return self;
}
// set entry at index (y,x) to double value
-(void)set:(double)value atY:(int)y X:(int)x{
[M replaceObjectAtIndex:(xmax*y+x) withObject:[NSNumber numberWithDouble:value]];
}
// get entry at index (y,x) as double value
-(double)Y:(int)y X:(int)x{
double r = [[M objectAtIndex:(xmax*y+x)] doubleValue];
return r;
}
// generate random matrix with floats [0,1) with size y X x
-(id)randomWithY:(int)y X:(int)x{
[self initWithY:y X:x];
for(int i=0; i<ymax*xmax; i++){
double val=((double)arc4random() / ARC4RANDOM_MAX);
[M addObject:[NSNumber numberWithDouble:val]];
}
return self;
}
// generate random binary matrix with doubles (0,1) and population density p
-(id)randomBinMatrixWithY:(int)y X:(int)x Density:(double)p{
[self initWithY:y X:x];
for(int i=0; i<ymax*xmax; i++){
double val=((double)arc4random() / ARC4RANDOM_MAX);
if(val<=p){
[M addObject:[NSNumber numberWithDouble:1]];
}
else{
[M addObject:[NSNumber numberWithDouble:0]];
}
}
return self;
}
@end
Das ganze gibts etwas übersichtlicher auch hier:
http://pastie.org/private/k8tgjqviu4y3x0mrnkrrpw
Eventuell brauche ich später noch eine 3D-Matrix, ich hätte diese jetzt einfach aus einem neuen NSMutableArray gebaut, in das ich meine Matrizen rein pflanze und eine neue Zugriffs-Methode dazu schreibe, denkt ihr, dass durch diese vorgehensweise der Code zu langsam wird?
Vielen Dank schonmal im Voraus für eure Anregungen!