समस्या
स्टैंडर्डाइज़ेशन किसी फ़ीचर को ऐसे स्केल करता है कि उसका औसत 0 और मानक विचलन 1 हो, जिससे कई मॉडल (और ग्रेडिएंट डिसेंट) सबसे अच्छा काम करते हैं:
z = (x - mean) / std
पॉपुलेशन मानक विचलन का इस्तेमाल करें: std = √(Σ(x - mean)² / n)। अगर std 0 हो (सभी मान बराबर), तो हर मान के लिए 0 लौटाएँ।
z_scores(values) लागू करें।
इनपुट
values: एक फ़ीचर के मान।
आउटपुट
हर मान का z-स्कोर उसी क्रम में लौटाएँ।
सीमाएँ
1 ≤ लंबाई ≤ 10,000
-1,000,000 ≤ हर मान ≤ 1,000,000
उदाहरण
इनपुट:
values = [2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0]
अपेक्षित आउटपुट:
expected = [-1.5, -0.5, -0.5, -0.5, 0.0, 0.0, 1.0, 2.0]
इनपुट:
std::vector<double> values = {2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};
अपेक्षित आउटपुट:
std::vector<double> expected = {-1.5, -0.5, -0.5, -0.5, 0.0, 0.0, 1.0, 2.0};
इनपुट:
double[] values = new double[] {2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};
अपेक्षित आउटपुट:
double[] expected = new double[] {-1.5, -0.5, -0.5, -0.5, 0.0, 0.0, 1.0, 2.0};
व्याख्या
औसत 40 / 8 = 5 है और पॉपुलेशन मानक विचलन √(32 / 8) = 2 है, इसलिए 2 → (2 - 5) / 2 = -1.5, 4 → -0.5, 5 → 0, 7 → 1 और 9 → 2। परिणाम: [-1.5, -0.5, -0.5, -0.5, 0, 0, 1, 2]।
इनपुट:
values = [3.0, 3.0]
अपेक्षित आउटपुट:
expected = [0.0, 0.0]
इनपुट:
std::vector<double> values = {3.0, 3.0};
अपेक्षित आउटपुट:
std::vector<double> expected = {0.0, 0.0};
इनपुट:
double[] values = new double[] {3.0, 3.0};
अपेक्षित आउटपुट:
double[] expected = new double[] {0.0, 0.0};
व्याख्या
दोनों मान औसत के बराबर हैं, इसलिए मानक विचलन 0 है और दोनों z-स्कोर 0 हैं।
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।