Changeset 4670:7ba3b0b36c46 in orange


Ignore:
Timestamp:
05/19/08 00:42:52 (6 years ago)
Author:
janezd <janez.demsar@…>
Branch:
default
Convert:
156c508ef7c676c5dcb31aa5ed36ea17de1f986e
Message:
  • fixes in sampling for loess
File:
1 edited

Legend:

Unmodified
Added
Removed
  • source/include/stat.hpp

    r4635 r4670  
    14741474 
    14751475 
    1476 enum { DISTRIBUTE_MINIMAL, DISTRIBUTE_FACTOR, DISTRIBUTE_FIXED, DISTRIBUTE_UNIFORM }; 
     1476enum { DISTRIBUTE_MINIMAL, DISTRIBUTE_FACTOR, DISTRIBUTE_FIXED, DISTRIBUTE_UNIFORM, DISTRIBUTE_MAXIMAL }; 
    14771477 
    14781478template<class T, class U> 
     
    14871487  result.clear(); 
    14881488 
     1489  if ((nPoints == 1) || (DISTRIBUTE_MINIMAL && (nPoints <= points.size())) || (DISTRIBUTE_MAXIMAL && (nPoints >= points.size()))) { 
     1490    for (mapiterator pi(points.begin()), pe(points.end()); pi != pe; pi++) 
     1491      result.push_back((*pi).first); 
     1492    return; 
     1493  } 
     1494   
    14891495  switch (method) { 
    14901496    case DISTRIBUTE_FACTOR: { 
     
    15051511 
    15061512 
    1507     case DISTRIBUTE_MINIMAL: { 
    1508       if (nPoints<=points.size()) { 
    1509         for (mapiterator pi(points.begin()), pe(points.end()); pi != pe; pi++) 
    1510           result.push_back((*pi).first); 
    1511       } 
    1512       else { 
    1513         T ineach = float(nPoints - points.size()) / float(points.size()-1); 
    1514         T inthis = T(0.0); 
     1513    case DISTRIBUTE_MINIMAL: {  // All original points plus some in between to fill up the quota 
     1514      T ineach = float(nPoints - points.size()) / float(points.size()-1); 
     1515      T inthis = T(0.0); 
    15151516     
    1516         for (mapiterator pi(points.begin()), pe(points.end());;) { 
    1517           T ax = (*pi).first; 
    1518           result.push_back(ax); 
    1519  
    1520           if (++pi==pe) 
    1521             break; 
    1522  
    1523           inthis += ineach; 
    1524           if (inthis>=T(0.5)) { 
    1525             T dif = ((*pi).first - ax) / (int(floor(inthis))+1); 
    1526             while (inthis>T(0.5)) { 
    1527               result.push_back(ax += dif); 
    1528               inthis -= T(1.0); 
    1529             } 
     1517      for (mapiterator pi(points.begin()), pe(points.end());;) { 
     1518        T ax = (*pi).first; 
     1519        result.push_back(ax); 
     1520 
     1521        if (++pi==pe) 
     1522          break; 
     1523 
     1524        inthis += ineach; 
     1525        if (inthis>=T(0.5)) { 
     1526          T dif = ((*pi).first - ax) / (int(floor(inthis))+1); 
     1527          while (inthis>T(0.5)) { 
     1528            result.push_back(ax += dif); 
     1529            inthis -= T(1.0); 
    15301530          } 
    15311531        } 
     
    15341534    } 
    15351535 
     1536    case DISTRIBUTE_MAXIMAL: {  // Just as many points as allowed 
     1537      T ineach = float(points.size()) / float(nPoints);  
     1538      T inthis = T(0.0); 
     1539     
     1540      for(mapiterator pi(points.begin()), pe(points.end()); pi != pe; pi++) { 
     1541        inthis += 1; 
     1542        if (inthis >= 0) { 
     1543          result.push_back((*pi).first); 
     1544          inthis -= ineach; 
     1545        } 
     1546      } 
     1547      return; 
     1548    } 
    15361549 
    15371550    case DISTRIBUTE_FIXED: { 
Note: See TracChangeset for help on using the changeset viewer.