গাউসিয়ান ম্যাট্রিক্স তৈরি করুন


12

গাউসিয়ান ব্লার হ'ল একটি পদ্ধতি যা ধীরে ধীরে চিত্রগুলি অস্পষ্ট করার জন্য ব্যবহৃত হয়। এটিতে একটি ম্যাট্রিক্স তৈরি করা জড়িত যা এটি কোনও চিত্রের পিক্সেলের সাথে মিশ্রিত করে ব্যবহার করা হবে। এই চ্যালেঞ্জে, আপনার কাজটি গাউসিয়ান ব্লারটিতে ব্যবহৃত ম্যাট্রিক্স তৈরি করা। আপনি একটি ইনপুট r নেবেন যা অস্পষ্টতার ব্যাসার্ধ এবং একটি ইনপুট σ যা মাত্রা (2 আর + 1 × 2 আর + 1) সহ একটি ম্যাট্রিক্স নির্মানের জন্য আদর্শ বিচ্যুতি হবে । ম্যাট্রিক্সের প্রতিটি মানের একটি ( x , y ) মান থাকবে যা কেন্দ্র থেকে প্রতিটি দিকের তার নিখুঁত দূরত্বের উপর নির্ভর করে এবং জি ( x , y ) গণনা করতে ব্যবহৃত হবে যেখানে সূত্রজি হয়

সূত্র

উদাহরণস্বরূপ, আর = 2 হলে আমরা একটি 5 এক্স 5 ম্যাট্রিক্স উত্পন্ন করতে চাই। প্রথমত, ( x , y ) মানের ম্যাট্রিক্স হয়

(2, 2) (1, 2) (0, 2) (1, 2) (2, 2)
(2, 1) (1, 1) (0, 1) (1, 1) (2, 1)
(2, 0) (1, 0) (0, 0) (1, 0) (2, 0)
(2, 1) (1, 1) (0, 1) (1, 1) (2, 1)
(2, 2) (1, 2) (0, 2) (1, 2) (2, 2)

তারপরে, σ = 1.5 দিন এবং প্রতিটিকে ( x , y ) জি প্রয়োগ করুন

0.0119552 0.0232856 0.0290802 0.0232856 0.0119552
0.0232856 0.0453542 0.0566406 0.0453542 0.0232856
0.0290802 0.0566406 0.0707355 0.0566406 0.0290802
0.0232856 0.0453542 0.0566406 0.0453542 0.0232856
0.0119552 0.0232856 0.0290802 0.0232856 0.0119552

সাধারণত চিত্র অস্পষ্ট হওয়ার সাথে সাথে এই ম্যাট্রিক্সটি সেই ম্যাট্রিক্সের সমস্ত মানের সমষ্টি নিয়ে এবং এর দ্বারা ভাগ করে স্বাভাবিক করা হবে। এই চ্যালেঞ্জের জন্য, এটির প্রয়োজন নেই এবং সূত্র দ্বারা গণনা করা কাঁচা মানগুলি আউটপুটটি কী হওয়া উচিত।

বিধি

  • এটি তাই সংক্ষিপ্ততম কোড জিততে পারে।
  • ইনপুট r হ'ল একটি সংযুক্তি পূর্ণসংখ্যা এবং σ হবে ইতিবাচক বাস্তব সংখ্যা।
  • আউটপুট অবশ্যই একটি ম্যাট্রিক্স উপস্থাপন করতে হবে। এটি একটি 2 ডি অ্যারে, একটি 2 ডি অ্যারে প্রতিনিধিত্ব করে একটি স্ট্রিং, বা অনুরূপ কিছু হিসাবে ফর্ম্যাট করা যেতে পারে।
  • ভাসমান-পয়েন্টের ভুলত্রুটিগুলি আপনার বিরুদ্ধে গণনা করা হবে না।

পরীক্ষার কেস

(r, σ) = (0, 0.25)
2.54648

(1, 7)
0.00318244 0.00321509 0.00318244
0.00321509 0.00324806 0.00321509
0.00318244 0.00321509 0.00318244

(3, 2.5)
0.00603332 0.00900065 0.0114421  0.012395 0.0114421 0.00900065 0.00603332
0.00900065  0.0134274 0.0170696 0.0184912 0.0170696  0.0134274 0.00900065
 0.0114421  0.0170696 0.0216997  0.023507 0.0216997  0.0170696  0.0114421
  0.012395  0.0184912  0.023507 0.0254648  0.023507  0.0184912   0.012395
 0.0114421  0.0170696 0.0216997  0.023507 0.0216997  0.0170696  0.0114421
0.00900065  0.0134274 0.0170696 0.0184912 0.0170696  0.0134274 0.00900065
0.00603332 0.00900065 0.0114421  0.012395 0.0114421 0.00900065 0.00603332

(4, 3.33)
0.00339074 0.00464913 0.00582484 0.00666854 0.00697611 0.00666854 0.00582484 0.00464913 0.00339074
0.00464913 0.00637454 0.00798657  0.0091434 0.00956511  0.0091434 0.00798657 0.00637454 0.00464913
0.00582484 0.00798657  0.0100063  0.0114556   0.011984  0.0114556  0.0100063 0.00798657 0.00582484
0.00666854  0.0091434  0.0114556   0.013115  0.0137198   0.013115  0.0114556  0.0091434 0.00666854
0.00697611 0.00956511   0.011984  0.0137198  0.0143526  0.0137198   0.011984 0.00956511 0.00697611
0.00666854  0.0091434  0.0114556   0.013115  0.0137198   0.013115  0.0114556  0.0091434 0.00666854
0.00582484 0.00798657  0.0100063  0.0114556   0.011984  0.0114556  0.0100063 0.00798657 0.00582484
0.00464913 0.00637454 0.00798657  0.0091434 0.00956511  0.0091434 0.00798657 0.00637454 0.00464913
0.00339074 0.00464913 0.00582484 0.00666854 0.00697611 0.00666854 0.00582484 0.00464913 0.00339074

পাই এবং ই হতে আমাদের কতটা সঠিক প্রয়োজন?
xnor

@ এক্সনর ভাল প্রশ্ন। যদি আপনার ভাষা অনুমতি দেয় তবে আপনি ধরে নিতে পারেন যে এই মানগুলি ইতিমধ্যে কোনও চলক বা অনুরূপ কিছুতে সঞ্চিত রয়েছে। যদি তা না হয় তবে আপনি পিআই = 3.14 এবং ই = 2.72 তৈরি করে দুটি দশমিক স্থানে মান ব্যবহার করতে পারেন যেখানে আপনি সেই মানগুলিকে প্রতিটি একক বাইট হিসাবে গণনা করতে পারেন। অবশ্যই, চূড়ান্ত উত্তরের ভুলগুলি আপনার বিরুদ্ধে আবার গণনা করা হবে না।
মাইল

আউটপুটটি কি দশমিক সংখ্যা হতে হয়, বা এটিতে ধ্রুবকগুলির সাথে এটি সঠিক সংখ্যা হতে পারে?
জংহওয়ান মিন

@ জংহওয়ানমিন সঠিক সংখ্যা যেমন ম্যাথমেটিকায় রয়েছে ঠিক আছে।
মাইল

1
@ মাইলস আমি মনে করি আপনি কেবলমাত্র একটি নির্দিষ্ট নির্ভুলতা (যেমন 3 দশমিক স্থান) বাধ্যতামূলক করলে এটি আরও সহজ হবে।
orlp

উত্তর:


7

গণিত, 60 54 50 বাইট

ধন্যবাদ 4 গ্রেটমার্টিনকে 4 বাইটের জন্য!

Array[s=2#2^2;E^(-{##}.{##}/s)/π/s&,1+2{#,#},-#]&

আর সিগমাকে ইনপুট হিসাবে গ্রহণ করে, ম্যাট্রিক্স (সঠিক সংখ্যা) প্রদান করে।

অন্তর্নির্মিত সংস্করণ (58 বাইট)

GaussianMatrix[{##},Standardized->1<0,Method->"Gaussian"]&

অবশ্যই ম্যাথামেটিকার জন্য এটি একটি অন্তর্নির্মিত রয়েছে, তবে এটি অনেক দীর্ঘ।


4
আপনি প্রতিস্থাপন করতে পারেন -lদ্বারা -#শেষে ( Arrayযে থ্রেড হবে আপনার জন্য উভয় মাত্রা উপর); এটি l4 বাইট সংরক্ষণ করে সংজ্ঞা দেওয়ার প্রয়োজনীয়তা কেড়ে নেয় ।
গ্রেগ মার্টিন

5

এমএটিএল , 20 বাইট

_G&:U&+iUE/_Ze5MYP*/

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

ব্যাখ্যা

_     % Take input r implicitly. Negate
G     % Push r again
&:    % Binary range: [-r -r+1 ... r]
U     % Square, elementwise
&+    % Matrix of all pairwise additions
i     % Take input σ
U     % Square
E     % Multiply by 2. Gives 2σ^2
/     % Divide
_     % Negate
Ze    % Exponential
5M    % Push 2σ^2 again
YP    % Push pi
*     % Multiply
/     % Divide. Display implicitly



4

পাইথন, 88 বাইট

lambda r,s:[[.5/3.14/s/s/2.72**((x*x+y*y)/2/s/s)for x in range(-r,r+1)]for y in range(-r,r+1)]

নিয়মটি ব্যবহার করুন যেখানে আপনি প্রতিটি বাইটের জন্য 3.14 এবং 2.72 কে হার্ডকোড করতে পারেন।


1

পার্ল 6 , 71 বাইট

->\r,\σ{map ->\y{map ->\x{exp((x*x+y*y)/-2/σ/σ)/2/pi/σ/σ},-r..r},-r..r}

এনকোড করা থাকলে এবং কোনও ফাইলে সংরক্ষণ করা হলে প্রযুক্তিগতভাবে এটি by১ বাইটের বেশি হতে পারে, তবে আমি সত্যিকারের গ্রীক সিগমা সহ "সিগমা" ইনপুটটির নামকরণে প্রতিহত করতে পারি না। এটি চাইলে যে কোনও সরল-এএসসিআইআই চিঠির নামকরণ করা যেতে পারে।


1

এস এ এস ম্যাক্রো ল্যাঙ্গুয়েজ, 296 বাইট

সম্ভবত এটি করার আরও অনেক বেশি কার্যকর উপায় তবে এটি কাজ করে :)

এই কোডটি ফলাফল ডেটাসেট প্রিন্ট করে।

%macro G(r,s);%let l=%eval(2*&r+1);%let pi=%sysfunc(constant(pi));data w;array a[*] t1-t&l;%do i=-&r %to &r;%do j=-&r %to &r;%let t=%sysfunc(sum(&j,&r,1));a[&t]=%sysevalf(1/(2*&pi*&s**2)*%sysfunc(exp(-(%sysfunc(abs(&j))**2+%sysfunc(abs(&i))**2)/(2*&s**2))));%end;output;%end;proc print;run;%mend;

1

হাস্কেল, 59 বাইট

r#s|i<-[-r..r]=[[exp(-(x*x+y*y)/2/s/s)/2/pi/s/s|x<-i]|y<-i]

ব্যবহারের উদাহরণ:

1#7

[[3.1824449424224664e-3,3.2150851187016326e-3,3.1824449424224664e-3],
 [3.2150851187016326e-3,3.2480600630999047e-3,3.2150851187016326e-3],
 [3.1824449424224664e-3,3.2150851187016326e-3,3.1824449424224664e-3]]

0

পাইথন 2.7, 167 বাইট

খুব সহজ সমাধান:

from __future__ import division;from math import*;r,s=input();s*=2*s;R=range(-r,r+1);print"\n".join("\t".join(str(pow(e,-(x*x+y*y)/s)/(pi*s))[:9]for x in R)for y in R)

এখানে চেষ্টা করুন !

Ungolfed:

from __future__ import division
from math import *
r,s = input()                         # Take input
s *= 2*s                              # Set s = 2*s^2; simplifies the expression
R = range(-r,r+1)                     # Range object; used twice

                                   # G(x,y)             # Stripped
print "\n".join("\t".join(str(pow(e,-(x*x + y*y)/s)/(pi*s))[:9] for x in R) for y in R)

5
from __future__ import divisionসত্যিই?
orlp
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.