[英]How to generate a random n*y matrix with columns of unit length?
是否有任何特定的形式或算法來生成一個隨機矩陣,其中所有列范數等於1?
我將在c / obj-c中實現該算法。 但是,只是如何做的一般想法適合我!
我做到了
在該答案中,有兩件事是錯誤的:
這是正確的代碼。 順便說一句,我使用了該庫中的片段代碼, 該代碼實現了Ziggurat算法。
+ (NSMutableArray *) generateNormalPseudoRandomNumbers:(NSInteger)n {
NSMutableArray *randomNumberArray = [[NSMutableArray alloc] initWithCapacity:n];
unsigned long int seed;
for (NSInteger j = 0; j < 3; j++ )
{
if ( ( j % 2 ) == 0 )
{
seed = 123456789;
}
else
{
seed = 987654321;
}
for (NSInteger i = 1; i <= 10; i++ )
{
float value = [Utils r4_uni:&seed];
[randomNumberArray addObject:[NSNumber numberWithFloat:value]];
}
}
return randomNumberArray;
}
+ (double) computeVectorNorm:(NSMutableArray *) matrix {
NSInteger x = [matrix count];
double norm = 0;
for(NSInteger i=0; i<x;i++){
norm += pow([[matrix objectAtIndex:i] doubleValue], 2.0f);
}
norm = sqrt(norm);
return norm;
}
+ (NSMutableArray *) normalizeRandomNumberArray:(NSMutableArray *) randomNumberArray {
double norm = [self computeVectorNorm:randomNumberArray];
for(NSInteger i=0; i< [randomNumberArray count]; i++) {
NSNumber *normalizedNumber = [NSNumber numberWithDouble:([[randomNumberArray objectAtIndex:i] doubleValue] / norm)];
[randomNumberArray replaceObjectAtIndex:i withObject:normalizedNumber];
}
return randomNumberArray;
}
+ (double *) generateAMatrix:(NSInteger)k d:(NSInteger)d {
double *matrix = (double *) malloc(k * d * sizeof(double));
for(NSInteger i=0; i < k; i++) {
NSMutableArray *column = [self normalizeRandomNumberArray:[self generateNormalPseudoRandomNumbers:d]];
for(NSInteger j=0; j<d; j++) {
matrix[i*d+j] = [[column objectAtIndex:j] doubleValue];
}
}
return matrix;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.