MCPcopy Create free account
hub / github.com/apache/arrow / WelfordVar

Function WelfordVar

cpp/src/arrow/compute/kernels/aggregate_test.cc:3566–3582  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3564// XXX: not stable for long array with very small `stddev / average`
3565template <typename ArrayType>
3566std::pair<double, double> WelfordVar(const ArrayType& array) {
3567 const auto values = array.raw_values();
3568 BitmapReader reader(array.null_bitmap_data(), array.offset(), array.length());
3569 double count = 0, mean = 0, m2 = 0;
3570 double mean_adjust = 0, m2_adjust = 0;
3571 for (int64_t i = 0; i < array.length(); ++i) {
3572 if (reader.IsSet()) {
3573 ++count;
3574 double delta = static_cast<double>(values[i]) - mean;
3575 KahanSum(mean, mean_adjust, delta / count);
3576 double delta2 = static_cast<double>(values[i]) - mean;
3577 KahanSum(m2, m2_adjust, delta * delta2);
3578 }
3579 reader.Next();
3580 }
3581 return std::make_pair(m2 / count, m2 / (count - 1));
3582}
3583
3584// Test random chunked array
3585template <typename ArrowType>

Callers 2

TYPED_TESTFunction · 0.85
TEST_FFunction · 0.85

Calls 6

KahanSumFunction · 0.85
raw_valuesMethod · 0.45
offsetMethod · 0.45
lengthMethod · 0.45
IsSetMethod · 0.45
NextMethod · 0.45

Tested by

no test coverage detected