এনট্রপি গণনা করা হচ্ছে


13

ইনপুট

একটি ম্যাট্রিক্স Mদুটি পৃথক পৃথক পূর্ণসংখ্যার রেখা হিসাবে প্রতিনিধিত্ব করে। প্রতিটি লাইন পূর্ণসংখ্যার একই সংখ্যক প্রতি লাইনে পূর্ণসংখ্যার সংখ্যা হতে সর্বাধিক 20 হবে থাকবে এবং প্রতিটি পূর্ণসংখ্যা পারেন হবে -1 বা 1. Mসুতরাং হবে 2দ্বারা nযেখানে nদুই লাইন প্রতিটি পূর্ণসংখ্যার সংখ্যা।

আপনার কোডটি একটি সম্পূর্ণ প্রোগ্রাম হওয়া উচিত। এবং কোনও স্ট্যান্ডার্ড বা কোনও ফাইল থেকে ইনপুট গ্রহণ করুন (এটি আপনার পছন্দ)। আপনি স্ট্যান্ডার্ড থেকে ইনপুট কোনও ফাইল থেকে বা পরামিতি হিসাবে গ্রহণ করতে পারেন। তবে আপনি যদি পরবর্তীকর্মটি করেন তবে দয়া করে আপনার কোডটি কীভাবে কাজ করা উচিত তার একটি স্পষ্ট উদাহরণ দিন এবং মনে রাখবেন যে এটি অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম এবং ম্যাট্রিক্স ইনপুটটিতে কীভাবে Mপ্রতিনিধিত্ব করবে। অন্য কথায়, আপনাকে কিছু বিশ্লেষণ করার সম্ভাবনা রয়েছে।

আউটপুট

The -1,1 from থেকে উপাদানগুলি অভিন্ন এবং স্বতন্ত্রভাবে নির্বাচিত হয় এমন বিতরণের বাইনারি শ্যানন এন্ট্রপি } এক- মাত্রিক কলাম ভেক্টর।M*xxxn

একটি পৃথক সম্ভাব্যতা বিতরণের এনট্রপি হয়

- sum p_i log_2(p_i)

এক্ষেত্রে, p_i সম্ভাব্যতাটি iঅনন্য সম্ভাব্য M*x

উদাহরণ এবং সহায়ক ইঙ্গিত

একটি কাজের উদাহরণ হিসাবে, ম্যাট্রিক্স Mহতে দিন

-1 1
-1 -1

এখন সমস্ত 2^2বিভিন্ন সম্ভাব্য ভেক্টর তাকান x। প্রত্যেকের জন্য আমরা গণনা করি M*xএবং সমস্ত ফলাফলকে একটি অ্যারেতে রেখেছি (2-উপাদান ভেক্টরের 4-উপাদান অ্যারে)। যদিও 4 টি ভেক্টরের প্রতিটিটির জন্য এর সংঘটিত হওয়ার সম্ভাবনা রয়েছে তবে 1/2^2 = 1/4আমরা কেবল প্রতিটি অনন্য ফলাফলকারী ভেক্টর সংখ্যক সময় নিয়ে আগ্রহী M*xএবং তাই আমরা একই অনন্য ভেক্টরগুলিতে নেতৃত্বদানকারী কনফিগারেশনের স্বতন্ত্র সম্ভাবনাগুলি যোগ করবো। অন্য কথায়, সম্ভাব্য অনন্য M*xভেক্টরগুলি আমরা যে বিতরণটি তদন্ত করছি তার ফলাফলগুলি বর্ণনা করে এবং আমাদের এই ফলাফলগুলির প্রতিটিটির সম্ভাব্যতা নির্ধারণ করতে হবে (যা নির্মাণের মাধ্যমে সর্বদা পূর্ণসংখ্যার একক 1/2^2বা 1/2^nসাধারণভাবে হবে) এনট্রপি গণনা।

সাধারণ nক্ষেত্রে, Mসম্ভাব্য ফলাফলগুলির উপর নির্ভর করে M*x"সমস্ত আলাদা" থেকে শুরু করে (এই ক্ষেত্রে আমাদের nমানগুলির iমধ্যে মান রয়েছে p_iএবং প্রতিটি p_iসমান হয় 1/2^n) থেকে "সমস্ত একই" হতে পারে (এক্ষেত্রে একটি একক সম্ভাবনা রয়েছে) ফলাফল, এবংp_1 = 1 )।

বিশেষত, উপরের 2x2ম্যাট্রিক্সের জন্য Mআমরা এটি চারটি সম্ভাব্য কনফিগারেশন ( [+-1; +-1]) দিয়ে গুন করে জানতে পারি যে প্রতিটি ফলাফলকারী ভেক্টর আলাদা is সুতরাং এক্ষেত্রে চারটি ফলাফল রয়েছে এবং ফলস্বরূপ p_1 = p_2 = p_3 = p_4 = 1/2^2 = 1/4log_2(1/4) = -2আমাদের মনে আছে যে :

- sum p_i log_2(p_i) = -(4*(-2)/4) = 2

সুতরাং এই ম্যাট্রিক্সের জন্য চূড়ান্ত আউটপুট 2।

পরীক্ষার মামলা

ইনপুট:

-1 -1 
-1 -1

আউটপুট:

1.5

ইনপুট:

-1 -1 -1 -1
-1 -1 -1 -1

আউটপুট:

2.03063906223

ইনপুট:

-1  -1  -1  1
1  -1  -1  -1

আউটপুট:

3

7
1. মাত্রা কি x? ২. প্রশ্নটি স্ব-অন্তর্নিহিত করার স্বার্থে, বাইনারি শ্যানন এনট্রপি কীভাবে Mxসংজ্ঞায়িত করা হয়?
পিটার টেলর

4
@ পিটারের মন্তব্য নীচের দিকের লোকদের ঠিক ব্যাখ্যা করেছে। আমি এন্ট্রপির উপর নিবন্ধটি স্কিমেড করেছি এবং কী বাস্তবায়ন করতে হবে তা তাত্ক্ষণিকভাবে আমি খুঁজে পাচ্ছি না। শ্যানন এনট্রপি গণনা করার জন্য আপনার সূত্র / অ্যালগরিদম ঠিক কী নির্দিষ্ট করতে হবে।
লিন

5
প্রশ্নগুলি যাইহোক, স্ব-অন্তর্ভুক্ত হওয়া উচিত; এটি অসম্ভব যে উইকিপিডিয়া হঠাৎ অফলাইনে চলে যাবে, তবে চ্যালেঞ্জের সম্পূর্ণ বিবরণটি বুঝতে সক্ষম হতে অন্য পৃষ্ঠায় ক্লিক না করাই আদর্শ হবে।
ডুরকনব

2
ডিফল্টরূপে, ফাংশনগুলি প্রোগ্রামগুলির একটি বৈধ বিকল্প। আপনাকে এটিকে ওভারলুল করার অনুমতি দেওয়া হয়েছে তবে এটি কিছু ভাষাকে খুব দু: খিত করে তুলবে কারণ ফাইল বা স্টিডিন ইনপুট নিতে প্রচুর বয়লারপ্লেট লাগে। আরও বিস্তৃতভাবে, আমি গাণিতিক চ্যালেঞ্জের ক্ষেত্রে এই জাতীয় কোনও সীমাবদ্ধ ইনপুট ফর্ম্যাট রাখার বিরুদ্ধে প্রস্তাব দিই। ভাষার প্রাকৃতিক তালিকার ধরণটি লোকেদের অংশগ্রহণে আরও সুখী করবে।
xnor

3
@ ডোরোথী নোট করুন যে এটি "লগ_2 (0) সুবিধার জন্য 0 নয়", বরং "লিমি_ {পি-> 0} পি * লগ (পি) == 0"। সুতরাং "লগ_2 (0)" এখনও -ইনফ রয়েছে।
আন্দ্রেস ডেক

উত্তর:


3

গণিত, 48 68 বাইট tes

সম্পাদনা করুন: প্যারামিটার হিসাবে স্ট্রিং গ্রহণের জন্য প্রিপ্রোসেস যুক্ত করা হয়।

এর সহায়তায় Tuplesএবং Entropyবাস্তবায়ন সংক্ষিপ্ত এবং পাঠযোগ্য উভয়ই।

Entropy[2,{-1,1}~Tuples~Length@#.#]&@Thread@ImportString[#,"Table"]&

যেখানে থেকে Tuples[{-1,1},n]সমস্ত সম্ভাব্য- nটিপল দেয় {-1,1}এবংEntropy[2,list] বেস-2 তথ্য এনট্রপি দেয়।

শীতল জিনিসগুলির মধ্যে একটি হ'ল ম্যাথমেটিকা আসলে একটি নির্ভুল ভাব প্রকাশ করবে:

%["-1 -1 \n -1 -1"]
(* 3/2 *)

অতিরিক্ত .সংযোজন ( Entropy[2., ...) দিয়ে আনুমানিক ফলাফল অর্জন করা যায় ।


গাণিতিক হাস্যকর :) তবে আপনার উত্তরটি পুরোপুরি ফিট করে না। ইনপুটটি স্থান পৃথক করা হয়েছে যাতে কিছু পার্সিংয়ের প্রয়োজন হবে। সর্বশেষ আপডেট দেখুন।
ডোরোথি

3

পার্ল, 160 159 141 বাইট

-p141 বাইট আপডেটের জন্য +1 অন্তর্ভুক্ত

@y=(@z=/\S+/g)x 2**@z;@{$.}=map{evals/.1/"+".$&*pop@y/egr}glob"{-1,+1}"x@z}{$H{$_.$2[$i++]}++for@1;$\-=$_*log($_/=1<<@z)/log 2 for values%H;

STDINস্থান-বিচ্ছিন্ন 1বা এর সমন্বিত 2 লাইন হিসাবে ইনপুটটি প্রত্যাশিত -1
হিসাবে চালানperl -p 140.pl < inputfile

এটি কোনও পুরস্কার জিতবে না, তবে আমি ভেবেছিলাম আমার প্রচেষ্টাটি ভাগ করে নেব।
ব্যাখ্যা:

    @y=                             # @y is (@z) x (1<<$n)
       (@z = /\S+/g)                # construct a matrix row from non-WS
       x 2**@z;                     # repeat @z 2^$n times
    @{$.} = map {                   # $.=$INPUT_LINE_NUMBER: set @1 or @2
      eval s/.1/"+".$&*pop@y/egr    # multiply matrix row with vector
    } glob "{-1,+1}" x @z           # produce all possible vectors

}{                                  # `-p` trick: end `while(<>)`, reset `$_`

$H{ $_ . $2[$i++] }++               # count unique M*x columns
    for @1;

$\ -= $_ * log($_/=1<<@z) / log 2   # sum entropy distribution
        for values %H;

ডেটা

  • 159 আপডেট করুন: পরিবর্তে ()ব্যবহার করে মুছে ফেলে 1 টি সংরক্ষণ করুন ।**<<
  • আপডেটের 141: ব্যবহার করে 18 রক্ষা $.এবং -p

1
ধন্যবাদ! আমরা ppcg এই প্রোগ্রামটিতে পর্যাপ্ত Perl উত্তর হবে না
Dorothy

@ ডোরোথি এটি কারণ কোড-গল্ফাররা বেশিরভাগ অংশেই পার্লকে ঘৃণা করে
অ্যাডিসন ক্রম্প 12

@ ফ্ল্যাগএএসপ্যাম তবে, তবে .. পার্ল বোধগম্য, সংক্ষিপ্ত এবং সীমান্তরেখা উন্মাদ। এটি কোড-গল্ফের জন্য কীভাবে আরও উপযুক্ত হতে পারে ?
ডোরোথি

@ ডোরোথি ¯ \ _ (ツ) _ / ¯ আমরা এটিকে প্লেগের মতো এড়িয়ে চলি। ডুনো কেন, সত্যই।
অ্যাডিসন ক্রম্প 12

2

পাইথ, 37 বাইট

K^_B1lhJrR7.z_s*LldcRlKhMrSmms*VdkJK8

পরীক্ষা স্যুট

আপনাকে ম্যাট্রিক্সের গুণিতকটি ম্যানুয়ালি প্রয়োগ করতে হলে এটি কিছুটা জটিল ier

ব্যাখ্যা:

K^_B1lhJrR7.z_s*LldcRlKhMrSmms*VdkJK8
       JrR7.z                            Parse input into matrix, assign to J.
  _B1                                    [1, -1]
K^   lhJ                                 All +-1 vectors of length n, assign to K.
                           m       K     Map over K
                            m     J      Map over the rows of J
                             s*Vdk       Sum of vector product of vector and row.
                          S              Sort
                         r          8    Run length encode.
                       hM                Take just occurrence counts.
                   cRlK                  Divide by len(K) to get probabilities.
               *Lld                      Multiply each probabiliity by its log.
              s                          Sum.
             _                           Negate. Print implicitly.

কি দারুন! :) এটি অনেকটা কাজের মতো দেখাচ্ছে। এখন সিজমের লোকেরা কোথায় .....?
ডোরোথি

1

ম্যাটল্যাব, 196 194 187 184 126 154 বাইট

(126 থেকে 154 এর অতিরিক্ত 28 বাইটগুলি ইনপুট পার্সিংয়ের কারণে হয়: এখন কোডটি ইনপুটটিকে হোয়াইটস্পেস-পৃথক সংখ্যার দুটি লাইন হিসাবে স্বীকার করে))

f=@()str2num(input('','s'));M=[f();f()];n=size(M,2);x=(dec2bin(0:n^2-1,n)-48.5)*2*M';[~,~,c]=unique(x,'rows');p=accumarray(c,1)/2^n;disp(-sum(p.*log2(p)))

অবরুদ্ধ সংস্করণ:

f=@()str2num(input('','s'));        % shorthand for "read a line as vector"
M=[f();f()];                        % read matrix
n=size(M,2);                        % get lenght of vectors

x=(dec2bin(0:n^2-1,n)-48.5)*2*M';   % generate every configuration
                                    %    using binary encoding
[~,~,c]=unique(x,'rows');           % get unique rows of (Mx)^T
p=accumarray(c,1)/2^n;              % count multiplicities and normalize
disp(-sum(p.*log2(p)))              % use definition of entropy

আমি 6 বাইট দিয়ে দূরে করতে পারি যদি একটি "ans = ... " ধরণের আউটপুট মঞ্জুরি দেওয়া হয় তবে আমি এই সম্পর্কে কখনই নিশ্চিত নই 6

আমি দুঃখের সাথে বলতে চাই যে আমার আসল এবং অবশ্যই মজাদার সমাধানটি আমার বর্তমান সমাধানের তুলনায় বেশ জঘন্য ছিল। এটিও আমি প্রথমবার ব্যবহার করছি accumarray। একটি ছয় ইনপুট-প্যারামিটার অ্যাপ্লিকেশনটির এখনও অপেক্ষা করতে হবে, যদিও :)

ফলাফল (নিম্নলিখিত format long):

[-1 1
-1 -1]
     2

[-1 -1
-1 -1]
   1.500000000000000

[-1 -1 -1 -1
-1 -1 -1 -1]
   2.030639062229566

[-1  -1  -1  1
1  -1  -1  -1]
     3

ডিফল্ট সহ ফলাফলগুলি format short g:

[-1 1
-1 -1]
     2

[-1 -1
-1 -1]
          1.5

[-1 -1 -1 -1
-1 -1 -1 -1]
       2.0306

[-1  -1  -1  1
1  -1  -1  -1]
     3
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.