নমুনাগুলি মানিক করুন (জেড-স্কোর গণনা করুন)


14

ভাসমান পয়েন্ট সংখ্যাগুলির একটি তালিকা দেওয়া হয়েছে, এটি মানক করুন

বিস্তারিত

  • একটি তালিকা x1,x2,,xn হয় আদর্শায়িত যদি গড় সব মান 0, এবং স্ট্যানডার্ড ডেভিয়েশন হয় 1.এক এই গনা পথ প্রথম গড় কম্পিউটিং হয় μ এবং মানক চ্যুতির σ যেমন
    μ=1ni=1nxiσ=1ni=1n(xiμ)2,
    এবং তারপর যে প্রতিস্থাপন প্রমিতকরণ কম্পিউটিংxiসঙ্গেxiμσ
  • আপনি অনুমান করতে পারেন যে ইনপুট অন্তত দুটি স্বতন্ত্র এন্ট্রি (যা বোঝা ধারণ করে σ0 )।
  • মনে রাখবেন, কিছু বাস্তবায়নের নমুনা স্ট্যানডার্ড ডেভিয়েশন, যা জনসংখ্যা স্ট্যানডার্ড ডেভিয়েশন সমান নয় ব্যবহার σ আমরা এখানে ব্যবহার করছেন।
  • সমস্ত তুচ্ছ সমাধানের জন্য একটি সিডব্লিউ উত্তর আছে

উদাহরণ

[1,2,3] -> [-1.224744871391589,0.0,1.224744871391589]
[1,2] -> [-1,1]
[-3,1,4,1,5] -> [-1.6428571428571428,-0.21428571428571433,0.8571428571428572,-0.21428571428571433,1.2142857142857144]

(এই চিত্রগুলি দিয়ে এই উদাহরণগুলি উত্পন্ন হয়েছে ।)

উত্তর:




5

এপিএল (ডায়ালগ ক্লাসিক) , 21 20 19 বাইট

(-÷.5*⍨⊢÷⌹×≢)+/-⊢×≢

এটি অনলাইন চেষ্টা করুন!

⊢÷⌹ বর্গাকার যোগফল

⊢÷⌹×≢ দৈর্ঘ্য দ্বারা বিভক্ত বর্গাকার যোগফল


কি দারুন. আমার আর অবাক হওয়া উচিত নয়, তবে আমি প্রতিবারই থাকি
Quintec


4

এপিএল + উইন, 41,32 30 বাইট

9 বাইট সংরক্ষিত হয়েছে এরিকের জন্য ধন্যবাদ + 2 আরও এনজিএনকে ধন্যবাদ

x←v-(+/v)÷⍴v←⎕⋄x÷(+/x×x÷⍴v)*.5

সংখ্যার ভেক্টরের জন্য প্রম্পটস এবং গণনা মানে স্ট্যান্ডার্ড বিচ্যুতি এবং ইনপুট ভেক্টরের মানক উপাদান


আপনি নিয়োগ x←v-(+/v)÷⍴v←⎕এবং তারপর না করতে পারেন x÷((+/x*2)÷⍴v)*.5?
এরিক আউটগল্ফার

আমি সত্যিই পারি। ধন্যবাদ।
গ্রাহাম

সিঙ্গলটন এক্সটেনশন ( 1 2 3+,4← → 1 2 3+4) এপিএল + জিত করে ? যদি হ্যাঁ, আপনি পুনর্লিখন পারে (+/x*2)÷⍴vযেমন+/x×x÷⍴v
ngn

@ জিএনএন এটি আরও 2 বাইটের জন্য কাজ করে। ধন্যবাদ।
গ্রাহাম

3

আর + পিআর, 53 52 বাইট

@ রবার্ট এস এর সমাধান হিসাবে দেখা হিসাবে sum(x|1)পরিবর্তে -1 বাইট ব্যবহারlength(x)

pryr::f((x-(y<-mean(x)))/(sum((x-y)^2)/sum(x|1))^.5)

পরিসংখ্যানবিদদের জন্য নির্মিত ভাষা হওয়ার কারণে, আমি আশ্চর্য হয়েছি যে এটির কোনও অন্তর্নির্মিত ফাংশন নেই। কমপক্ষে একটিও আমি খুঁজে পাইনি। এমনকি ফাংশনটি mosaic::zscoreপ্রত্যাশিত ফলাফল দেয় না। নমুনা স্ট্যান্ডার্ড বিচ্যুতির পরিবর্তে জনসংখ্যার মান বিচ্যুতি ব্যবহারের কারণে এটি সম্ভবত।

এটি অনলাইন চেষ্টা করুন!


2
আপনি পরিবর্তন করতে পারেন <-একটি মধ্যে =1 বাইট সংরক্ষণ করুন।
রবার্ট এস

@ জে.ডো নাহ, রবার্ট এস এর সমাধান সম্পর্কে আমি যে পদ্ধতিটি মন্তব্য করেছি তা আমি ব্যবহার করেছি। scaleঝরঝরে!
জিউসেপ

2
@ J.Doe যেহেতু আপনি শুধুমাত্র ব্যবহার nএকবার আপনি এটা সরাসরি জন্য ব্যবহার করতে পারেন 38 বাইট
: Giuseppe

2
@RobertS। এখানে পিপিসিগিতে আমরা নমনীয় ইনপুট এবং আউটপুটকে প্রয়োজনীয় প্রয়োজনের চেয়ে বেশি আউটপুট সরবরাহ সহ উত্সাহিত করতে উত্সাহিত করি যেখানে আউটপুটটির সুনির্দিষ্ট বিন্যাস চ্যালেঞ্জের পুরো বিন্দু।
এনজিএম

6
অবশ্যই আর বিল্ট-ইনগুলি "জনসংখ্যার বৈকল্পিক" ব্যবহার করবে না। কেবল বিভ্রান্ত ইঞ্জিনিয়াররা এ জাতীয় জিনিস ব্যবহার করবে (এরপরে পাইথন এবং মতলব উত্তর;))
এনজিএম


2

জেলি , 10 বাইট

_ÆmµL½÷ÆḊ×

এটি অনলাইন চেষ্টা করুন!

এটি কোনও সংক্ষিপ্ত নয়, তবে জেলির নির্ধারক কার্যটি ÆḊভেক্টরের আদর্শও গণনা করে।

_Æm             x - mean(x)
   µ            then:
    L½          Square root of the Length
      ÷ÆḊ       divided by the norm
         ×      Multiply by that value

আরে, চমৎকার বিকল্প! দুর্ভাগ্যক্রমে, আমি এটি ছোট করার কোনও উপায় দেখতে পাচ্ছি না।
এরিক আউটগলফার

2

গণিত, 25 বাইট

Mean[(a=#-Mean@#)a]^-.5a&

খাঁটি ফাংশন। ইনপুট হিসাবে সংখ্যার একটি তালিকা নেয় এবং আউটপুট হিসাবে মেশিন-নির্ভুলতা সংখ্যার একটি তালিকা প্রদান করে। নোট করুন যে বিল্ট-ইন Standardizeফাংশনটি ডিফল্টরূপে নমুনা বৈকল্পিক ব্যবহার করে।


2

জে , 22 বাইট

-1 বাইট ধন্যবাদ গরুর কোয়েস্টকে!

(-%[:%:1#.-*-%#@[)+/%#

এটি অনলাইন চেষ্টা করুন!

জে , 31 23 বাইট

(-%[:%:#@[%~1#.-*-)+/%#

এটি অনলাইন চেষ্টা করুন!

                   +/%# - mean (sum (+/) divided (%) by the number of samples (#)) 
(                 )     - the list is a left argument here (we have a hook)
                 -      - the difference between each sample and the mean
                *       - multiplied by 
               -        - the difference between each sample and the mean
            1#.         - sum by base-1 conversion
          %~            - divided by
       #@[              - the length of the samples list
     %:                 - square root
   [:                   - convert to a fork (function composition) 
 -                      - subtract the mean from each sample
  %                     - and divide it by sigma

1
এটি পুনরায় [:(%[:%:1#.*:%#)]-+/%# সাজানো 22 টিও.আরুন / ##y / qfVmyrp2CgYKVg8D/… দেয় , আমি মনে করি those ক্যাপগুলির মধ্যে একটি অপসারণ করা যেতে পারে, তবে এখন পর্যন্ত কোনও ভাগ্য হয়নি, সম্পাদনা: আরও সরাসরি বাইটশেভিং (-%[:%:1#.-*-%#@[)+/%#22
ইউজার 41805

@Cows quack Thanks!
Galen Ivanov

2

APL (Dyalog Unicode), 33 29 bytes

{d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}

-4 bytes thanks to @ngn

Try it online!


you could assign ⍵-m to a variable and remove m← like this: {d÷.5*⍨l÷⍨+/×⍨d←⍵-(+/⍵)÷l←≢⍵}
ngn

@ngn Ah, nice, thanks, I didn't see that duplication somehow
Quintec

2

Haskell, 80 75 68 bytes

t x=k(/sqrt(f$sum$k(^2)))where k g=g.(-f(sum x)+)<$>x;f=(/sum(1<$x))

Thanks to @flawr for the suggestions to use sum(1<$x) instead of sum[1|_<-x] and to inline the mean, @xnor for inlining the standard deviation and other reductions.

Expanded:

-- Standardize a list of values of any floating-point type.
standardize :: Floating a => [a] -> [a]
standardize input = eachLessMean (/ sqrt (overLength (sum (eachLessMean (^2)))))
  where

    -- Map a function over each element of the input, less the mean.
    eachLessMean f = map (f . subtract (overLength (sum input))) input

    -- Divide a value by the length of the input.
    overLength n = n / sum (map (const 1) input)

1
You can replace [1|_<-x] with (1<$x) to save a few bytes. That is a great trick for avoiding the fromIntegral, that I haven't seen so far!
flawr

By the way: I like using tryitonline, you can run your code there and then copy the preformatted aswer for posting here!
flawr


You can write (-x+) for (+(-x)) to avoid parens. Also it looks like f can be pointfree: f=(/sum(1<$x)), and s can be replaced with its definition.
xnor

@xnor Ooh, (-x+) is handy, I’m sure I’ll be using that in the future
Jon Purdy

2

MathGolf, 7 bytes

▓-_²▓√/

Try it online!

Explanation

This is literally a byte-for-byte recreation of Kevin Cruijssen's 05AB1E answer, but I save some bytes from MathGolf having 1-byters for everything needed for this challenge. Also the answer looks quite good in my opinion!

▓         get average of list
 -        pop a, b : push(a-b)
  _       duplicate TOS
   ²      pop a : push(a*a)
    ▓     get average of list
     √    pop a : push(sqrt(a)), split string to list
      /   pop a, b : push(a/b), split strings

1

JavaScript (ES7),  80  79 bytes

a=>a.map(x=>(x-g(a))/g(a.map(x=>(x-m)**2))**.5,g=a=>m=eval(a.join`+`)/a.length)

Try it online!

Commented

a =>                      // given the input array a[]
  a.map(x =>              // for each value x in a[]:
    (x - g(a)) /          //   compute (x - mean(a)) divided by
    g(                    //   the standard deviation:
      a.map(x =>          //     for each value x in a[]:
        (x - m) ** 2      //       compute (x - mean(a))²
      )                   //     compute the mean of this array
    ) ** .5,              //   and take the square root
    g = a =>              //   g = helper function taking an array a[],
      m = eval(a.join`+`) //     computing the mean
          / a.length      //     and storing the result in m
  )                       // end of outer map()


1

Haskell, 59 bytes

(%)i=sum.map(^i)
f l=[(0%l*y-1%l)/sqrt(2%l*0%l-1%l^2)|y<-l]

Try it online!

Doesn't use libraries.

The helper function % computes the sum of ith powers of a list, which lets us get three useful values.

  • 0%l is the length of l (call this n)
  • 1%l is the sum of l (call this s)
  • 2%l is the sum of squares of l (call this m)

We can express the z-score of an element y as

(n*y-s)/sqrt(n*v-s^2)

(This is the expression (y-s/n)/sqrt(v/n-(s/n)^2) simplified a bit by multiplying the top and bottom by n.)

We can insert the expressions 0%l, 1%l, 2%l without parens because the % we define has higher precedence than the arithmetic operators.

(%)i=sum.map(^i) is the same length as i%l=sum.map(^i)l. Making it more point-free doesn't help. Defining it like g i=... loses bytes when we call it. Although % works for any list but we only call it with the problem input list, there's no byte loss in calling it with argument l every time because a two-argument call i%l is no longer than a one-argument one g i.


We do have LATEX here:)
flawr

I really like the % idea! It looks just like the discrete version of the statistical moments.
flawr

1

K (oK), 33 23 bytes

-10 bytes thanks to ngn!

{t%%(+/t*t:x-/x%#x)%#x}

Try it online!

First attempt at coding (I don't dare to name it "golfing") in K. I'm pretty sure it can be done much better (too many variable names here...)


1
nice! you can replace the initial (x-m) with t (tio)
ngn

1
ভিতরের { } is unnecessary - its implicit parameter name is x and it has been passed an x as argument (tio)
ngn

1
অন্য -1 প্রতিস্থাপন বাইট x-+/xসঙ্গে x-/x। বাম যুক্তি -/হ্রাসের প্রাথমিক মান হিসাবে কাজ করে ( টিও )
ngn

@ngn Thank you! Now I see that the first 2 golfs are obvious; the last one is beyond my current level :)
Galen Ivanov


1

TI-Basic (83 series), 14 11 bytes

Ans-mean(Ans
Ans/√(mean(Ans²

ইনপুট নেয় Ans। উদাহরণস্বরূপ, আপনি যদি উপরেরটি টাইপ করেন prgmSTANDARDতবে {1,2,3}:prgmSTANDARDফিরে আসবে {-1.224744871,0.0,1.224744871}

পূর্বে, আমি 1-Var Statsকমান্ডটি ব্যবহার করে চেষ্টা করেছি , যা জনসংখ্যার মানক বিচ্যুতিকে সংরক্ষণ করে σx, তবে এটি নিজেই গণনা করতে কম সমস্যা হয়।


1

05 এ বি 1 ই , 9 বাইট

ÅA-DnÅAt/

@ আরনাউল্ডের জাভাস্ক্রিপ্ট উত্তরের পোর্ট , সুতরাং তাকে নিশ্চিত করুন!

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

ÅA          # Calculate the mean of the (implicit) input
            #  i.e. [-3,1,4,1,5] → 1.6
  -         # Subtract it from each value in the (implicit) input
            #  i.e. [-3,1,4,1,5] and 1.6 → [-4.6,-0.6,2.4,-0.6,3.4]
   D        # Duplicate that list
    n       # Take the square of each
            #  i.e. [-4.6,-0.6,2.4,-0.6,3.4] → [21.16,0.36,5.76,0.36,11.56]
     ÅA     # Pop and calculate the mean of that list
            #  i.e. [21.16,0.36,5.76,0.36,11.56] → 7.84
       t    # Take the square-root of that
            #  i.e. 7.84 → 2.8
        /   # And divide each value in the duplicated list with it (and output implicitly)
            #  i.e. [-4.6,-0.6,2.4,-0.6,3.4] and 2.8 → [-1.6428571428571428,
            #   -0.21428571428571433,0.8571428571428572,-0.21428571428571433,1.2142857142857144]


0

পাইথ, 21 19 বাইট

mc-dJ.OQ@.Om^-Jk2Q2

এটি এখানে অনলাইনে চেষ্টা করুন

mc-dJ.OQ@.Om^-Jk2Q2Q   Implicit: Q=eval(input())
                       Trailing Q inferred
    J.OQ               Take the average of Q, store the result in J
           m     Q     Map the elements of Q, as k, using:
             -Jk         Difference between J and k
            ^   2        Square it
         .O            Find the average of the result of the map
        @         2    Square root it
                       - this is the standard deviation of Q
m                  Q   Map elements of Q, as d, using:
  -dJ                    d - J
 c                       Float division by the standard deviation
                       Implicit print result of map

সম্পাদনা: কেভিনের উত্তর দেখার পরে , অভ্যন্তরীণ ফলাফলের জন্য গড় অন্তর্নির্মিত ব্যবহারের জন্য পরিবর্তন করা হয়েছে। পূর্ববর্তী উত্তর:mc-dJ.OQ@csm^-Jk2QlQ2


0

SNOBOL4 (CSNOBOL4) , 229 বাইট

	DEFINE('Z(A)')
Z	X =X + 1
	M =M + A<X>	:S(Z)
	N =X - 1.
	M =M / N
D	X =GT(X) X - 1	:F(S)
	A<X> =A<X> - M	:(D)
S	X =LT(X,N) X + 1	:F(Y)
	S =S + A<X> ^ 2 / N	:(S)
Y	S =S ^ 0.5
N	A<X> =A<X> / S
	X =GT(X) X - 1	:S(N)
	Z =A	:(RETURN)

এটি অনলাইন চেষ্টা করুন!

লিঙ্কটি কোডের একটি কার্যকরী সংস্করণে যা এটির দৈর্ঘ্য এবং তার উপাদানগুলি দিয়ে এসটিডিআইএন থেকে একটি অ্যারে তৈরি করে, তারপরে ফাংশনটি চালায় Z এবং অবশেষে মানগুলি মুদ্রণ করে।

একটি ফাংশন সংজ্ঞায়িত করে Z যা একটি অ্যারে প্রদান করে।

1.লাইন 4 ফ্লোটিং পয়েন্ট গাণিতিক সঠিকভাবে করা প্রয়োজন।



0

কাঠকয়লা , 25 19 বাইট

≧⁻∕ΣθLθθI∕θ₂∕ΣXθ²Lθ

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। ব্যাখ্যা:

       θ    Input array
≧           Update each element
 ⁻          Subtract
   Σ        Sum of
    θ       Input array
  ∕         Divided by
     L      Length of
      θ     Input array

হিসাব μ এবং vectorised প্রতিটি থেকে এটি বিয়োগ এক্সআমি

  θ         Updated array
 ∕          Vectorised divided by
   ₂        Square root of
     Σ      Sum of
       θ    Updated array
      X     Vectorised to power
        ²   Literal 2
    ∕       Divided by
         L  Length of
          θ Array
I           Cast to string
            Implicitly print each element on its own line.

হিসাব σ, vectorised প্রতিটি বিভক্ত এক্সআমি এটি দ্বারা, এবং ফলাফল আউটপুট।

সম্পাদনা করুন: কেবলমাত্র ASCII- এর জন্য a) বাইটের পরিবর্তে 6 বাইট সংরক্ষণ করা হয়েছে খ) SquareRoot()পরিবর্তে Power(0.5)ভেক্টরাইজড ফিক্সিং Divide()(এটি IntDivide()পরিবর্তে করছিল ) গ) Power()ভেক্টরিজ তৈরি করা।


আউট 25 = কোন বাইট? : পি (এছাড়াও, আপনি এখনও টিআইও লিঙ্কটি আপডেট করেননি)
ASCII- কেবল

@ASCII-only Oops, thanks!
Neil
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.