@@ -283,7 +283,7 @@ def rank_1d_int64(object in_arr, ties_method='average', ascending=True,
283
283
284
284
285
285
def rank_2d_float64 (object in_arr , axis = 0 , ties_method = ' average' ,
286
- ascending = True , na_option = ' keep' ):
286
+ ascending = True , na_option = ' keep' , pct = False ):
287
287
"""
288
288
Fast NaN-friendly version of scipy.stats.rankdata
289
289
"""
@@ -296,6 +296,7 @@ def rank_2d_float64(object in_arr, axis=0, ties_method='average',
296
296
float64_t sum_ranks = 0
297
297
int tiebreak = 0
298
298
bint keep_na = 0
299
+ float count = 0.0
299
300
300
301
tiebreak = tiebreakers[ties_method]
301
302
@@ -335,13 +336,15 @@ def rank_2d_float64(object in_arr, axis=0, ties_method='average',
335
336
for i in range (n):
336
337
dups = sum_ranks = 0
337
338
total_tie_count = 0
339
+ count = 0.0
338
340
for j in range (k):
339
341
sum_ranks += j + 1
340
342
dups += 1
341
343
val = values[i, j]
342
344
if val == nan_value and keep_na:
343
345
ranks[i, argsorted[i, j]] = nan
344
346
continue
347
+ count += 1.0
345
348
if j == k - 1 or fabs(values[i, j + 1 ] - val) > FP_ERR:
346
349
if tiebreak == TIEBREAK_AVERAGE:
347
350
for z in range (j - dups + 1 , j + 1 ):
@@ -363,15 +366,16 @@ def rank_2d_float64(object in_arr, axis=0, ties_method='average',
363
366
for z in range (j - dups + 1 , j + 1 ):
364
367
ranks[i, argsorted[i, z]] = total_tie_count
365
368
sum_ranks = dups = 0
366
-
369
+ if pct:
370
+ ranks[i, :] /= count
367
371
if axis == 0 :
368
372
return ranks.T
369
373
else :
370
374
return ranks
371
375
372
376
373
377
def rank_2d_int64 (object in_arr , axis = 0 , ties_method = ' average' ,
374
- ascending = True , na_option = ' keep' ):
378
+ ascending = True , na_option = ' keep' , pct = False ):
375
379
"""
376
380
Fast NaN-friendly version of scipy.stats.rankdata
377
381
"""
@@ -384,6 +388,7 @@ def rank_2d_int64(object in_arr, axis=0, ties_method='average',
384
388
int64_t val
385
389
float64_t sum_ranks = 0
386
390
int tiebreak = 0
391
+ float count = 0.0
387
392
tiebreak = tiebreakers[ties_method]
388
393
389
394
if axis == 0 :
@@ -411,10 +416,12 @@ def rank_2d_int64(object in_arr, axis=0, ties_method='average',
411
416
for i in range (n):
412
417
dups = sum_ranks = 0
413
418
total_tie_count = 0
419
+ count = 0.0
414
420
for j in range (k):
415
421
sum_ranks += j + 1
416
422
dups += 1
417
423
val = values[i, j]
424
+ count += 1.0
418
425
if j == k - 1 or fabs(values[i, j + 1 ] - val) > FP_ERR:
419
426
if tiebreak == TIEBREAK_AVERAGE:
420
427
for z in range (j - dups + 1 , j + 1 ):
@@ -436,7 +443,8 @@ def rank_2d_int64(object in_arr, axis=0, ties_method='average',
436
443
for z in range (j - dups + 1 , j + 1 ):
437
444
ranks[i, argsorted[i, z]] = total_tie_count
438
445
sum_ranks = dups = 0
439
-
446
+ if pct:
447
+ ranks[i, :] /= count
440
448
if axis == 0 :
441
449
return ranks.T
442
450
else :
@@ -528,7 +536,7 @@ def rank_1d_generic(object in_arr, bint retry=1, ties_method='average',
528
536
ranks[argsorted[j]] = total_tie_count
529
537
sum_ranks = dups = 0
530
538
if pct:
531
- ranks / count
539
+ return ranks / count
532
540
else :
533
541
return ranks
534
542
@@ -562,7 +570,7 @@ class NegInfinity(object):
562
570
__cmp__ = _return_true
563
571
564
572
def rank_2d_generic (object in_arr , axis = 0 , ties_method = ' average' ,
565
- ascending = True , na_option = ' keep' ):
573
+ ascending = True , na_option = ' keep' , pct = False ):
566
574
"""
567
575
Fast NaN-friendly version of scipy.stats.rankdata
568
576
"""
@@ -577,6 +585,7 @@ def rank_2d_generic(object in_arr, axis=0, ties_method='average',
577
585
float64_t sum_ranks = 0
578
586
int tiebreak = 0
579
587
bint keep_na = 0
588
+ float count = 0.0
580
589
581
590
tiebreak = tiebreakers[ties_method]
582
591
@@ -611,7 +620,8 @@ def rank_2d_generic(object in_arr, axis=0, ties_method='average',
611
620
for i in range (len (values)):
612
621
ranks[i] = rank_1d_generic(in_arr[i],
613
622
ties_method = ties_method,
614
- ascending = ascending)
623
+ ascending = ascending,
624
+ pct = pct)
615
625
if axis == 0 :
616
626
return ranks.T
617
627
else :
@@ -626,12 +636,14 @@ def rank_2d_generic(object in_arr, axis=0, ties_method='average',
626
636
for i in range (n):
627
637
dups = sum_ranks = infs = 0
628
638
total_tie_count = 0
639
+ count = 0.0
629
640
for j in range (k):
630
641
val = values[i, j]
631
642
if val is nan_value and keep_na:
632
643
ranks[i, argsorted[i, j]] = nan
633
644
infs += 1
634
645
continue
646
+ count += 1.0
635
647
sum_ranks += (j - infs) + 1
636
648
dups += 1
637
649
if j == k - 1 or are_diff(values[i, j + 1 ], val):
@@ -652,7 +664,8 @@ def rank_2d_generic(object in_arr, axis=0, ties_method='average',
652
664
for z in range (j - dups + 1 , j + 1 ):
653
665
ranks[i, argsorted[i, z]] = total_tie_count
654
666
sum_ranks = dups = 0
655
-
667
+ if pct:
668
+ ranks[i, :] /= count
656
669
if axis == 0 :
657
670
return ranks.T
658
671
else :
0 commit comments