mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-28 02:21:59 +00:00
Update AggregateFunctionRankCorrelation.h
This commit is contained in:
parent
14d9586735
commit
222a4d2e9b
@ -134,18 +134,18 @@ public:
|
|||||||
const auto & value = this->data(place).values;
|
const auto & value = this->data(place).values;
|
||||||
size_t size = this->data(place).size_x;
|
size_t size = this->data(place).size_x;
|
||||||
|
|
||||||
//create a copy of values not to format data
|
// create a copy of values not to format data
|
||||||
PODArrayWithStackMemory<std::pair<Float64, Float64>, 32> tmp_values;
|
PODArrayWithStackMemory<std::pair<Float64, Float64>, 32> tmp_values;
|
||||||
tmp_values.resize(size);
|
tmp_values.resize(size);
|
||||||
for (size_t j = 0; j < size; ++ j)
|
for (size_t j = 0; j < size; ++ j)
|
||||||
tmp_values[j] = static_cast<std::pair<Float64, Float64>>(value[j]);
|
tmp_values[j] = static_cast<std::pair<Float64, Float64>>(value[j]);
|
||||||
|
|
||||||
//sort x_values
|
// sort x_values
|
||||||
std::sort(std::begin(tmp_values), std::end(tmp_values), ComparePairFirst<std::greater>{});
|
std::sort(std::begin(tmp_values), std::end(tmp_values), ComparePairFirst<std::greater>{});
|
||||||
|
|
||||||
for (size_t j = 0; j < size;)
|
for (size_t j = 0; j < size;)
|
||||||
{
|
{
|
||||||
//replace x_values with their ranks
|
// replace x_values with their ranks
|
||||||
size_t rank = j + 1;
|
size_t rank = j + 1;
|
||||||
size_t same = 1;
|
size_t same = 1;
|
||||||
size_t cur_sum = rank;
|
size_t cur_sum = rank;
|
||||||
@ -157,9 +157,9 @@ public:
|
|||||||
{
|
{
|
||||||
// rank of (j + 1)th number
|
// rank of (j + 1)th number
|
||||||
rank += 1;
|
rank += 1;
|
||||||
same++;
|
++same;
|
||||||
cur_sum += rank;
|
cur_sum += rank;
|
||||||
j++;
|
++j;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
@ -169,16 +169,16 @@ public:
|
|||||||
Float64 insert_rank = static_cast<Float64>(cur_sum) / same;
|
Float64 insert_rank = static_cast<Float64>(cur_sum) / same;
|
||||||
for (size_t i = cur_start; i <= j; ++i)
|
for (size_t i = cur_start; i <= j; ++i)
|
||||||
tmp_values[i].first = insert_rank;
|
tmp_values[i].first = insert_rank;
|
||||||
j++;
|
++j;
|
||||||
}
|
}
|
||||||
|
|
||||||
//sort y_values
|
// sort y_values
|
||||||
std::sort(std::begin(tmp_values), std::end(tmp_values), ComparePairSecond<std::greater>{});
|
std::sort(std::begin(tmp_values), std::end(tmp_values), ComparePairSecond<std::greater>{});
|
||||||
|
|
||||||
//replace y_values with their ranks
|
// replace y_values with their ranks
|
||||||
for (size_t j = 0; j < size;)
|
for (size_t j = 0; j < size;)
|
||||||
{
|
{
|
||||||
//replace x_values with their ranks
|
// replace x_values with their ranks
|
||||||
size_t rank = j + 1;
|
size_t rank = j + 1;
|
||||||
size_t same = 1;
|
size_t same = 1;
|
||||||
size_t cur_sum = rank;
|
size_t cur_sum = rank;
|
||||||
@ -190,9 +190,9 @@ public:
|
|||||||
{
|
{
|
||||||
// rank of (j + 1)th number
|
// rank of (j + 1)th number
|
||||||
rank += 1;
|
rank += 1;
|
||||||
same++;
|
++same;
|
||||||
cur_sum += rank;
|
cur_sum += rank;
|
||||||
j++;
|
++j;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -204,10 +204,10 @@ public:
|
|||||||
Float64 insert_rank = static_cast<Float64>(cur_sum) / same;
|
Float64 insert_rank = static_cast<Float64>(cur_sum) / same;
|
||||||
for (size_t i = cur_start; i <= j; ++i)
|
for (size_t i = cur_start; i <= j; ++i)
|
||||||
tmp_values[i].second = insert_rank;
|
tmp_values[i].second = insert_rank;
|
||||||
j++;
|
++j;
|
||||||
}
|
}
|
||||||
|
|
||||||
//count d^2 sum
|
// count d^2 sum
|
||||||
Float64 answer = static_cast<Float64>(0);
|
Float64 answer = static_cast<Float64>(0);
|
||||||
for (size_t j = 0; j < size; ++ j)
|
for (size_t j = 0; j < size; ++ j)
|
||||||
answer += (tmp_values[j].first - tmp_values[j].second) * (tmp_values[j].first - tmp_values[j].second);
|
answer += (tmp_values[j].first - tmp_values[j].second) * (tmp_values[j].first - tmp_values[j].second);
|
||||||
|
Loading…
Reference in New Issue
Block a user