ম্যাট্রিক্স-ভেক্টর গণনা করুন


14

কমপক্ষে দুটি উপাদানের একটি পূর্ণসংখ্য অ্যারে দেওয়া, অ্যারের ম্যাট্রিক্স-ভেক্টর (নীচে সংজ্ঞায়িত) আউটপুট করুন ।

ম্যাট্রিক্স-ভেক্টর গণনা করতে , প্রথমে nআকারের একটি ম্যাট্রিক্স তৈরি করতে আকার- ইনপুট অ্যারের মাধ্যমে আবর্তিত করুন n x n, মূল তির্যকটি অনুসরণ করে অ্যারের প্রথম উপাদানটি রয়েছে। এটি ম্যাট্রিক্স অংশ গঠন করে। ভেক্টরের জন্য, ইনপুট অ্যারেটি উল্লম্বভাবে ফ্লিপ করুন। তারপরে স্বাভাবিক ম্যাট্রিক্সের গুণটি সম্পাদন করুন। আউটপুট ভেক্টর ফলাফল।

উদাহরণ স্বরূপ,

a = [1, 2, 3]

প্রথমে অ্যারেটিকে দুটি বার ডানদিকে ঘোরান, পেতে [3, 1, 2]এবং [2, 3, 1]তারপরে 3x3ম্যাট্রিক্স গঠনে স্ট্যাক করে

[[1, 2, 3]
 [3, 1, 2]
 [2, 3, 1]]

এরপরে, ভেক্টর গঠনের জন্য অ্যারেটিকে উল্লম্বভাবে উল্টান

[[1, 2, 3]    [[1]
 [3, 1, 2]  x  [2]
 [2, 3, 1]]    [3]]

স্বাভাবিক ম্যাট্রিক্সের গুণটি সম্পাদন করুন

[[1, 2, 3]    [[1]    [[1+4+9]    [[14]
 [3, 1, 2]  x  [2]  =  [3+2+6]  =  [11]
 [2, 3, 1]]    [3]]    [2+6+3]]    [11]]

এবং আউটপুট হয় [14, 11, 11]বা [[14], [11], [11]](এটা এর চ্যাপ্টা থাকুক বা না থাকুক আপনার পছন্দ)।

উদাহরণ # 2

a = [2, 5, 8, 3]

[[2, 5, 8, 3]    [[2]    [[4+25+64+9]     [[102]
 [3, 2, 5, 8]  x  [5]  =  [6+10+40+24]  =  [80]
 [8, 3, 2, 5]     [8]     [16+15+16+15]    [62]
 [5, 8, 3, 2]]    [3]]    [10+40+24+6]]    [80]]

[102, 80, 62, 80]

বিধি

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

উত্তর:


8

জেলি , 5 বাইট

ṙJṚæ.

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

ব্যাখ্যা

প্রথমত:

যেখানে হয় সারি জীবানুবাহক এবং একটি হল কলামে ভেক্টর।vkx

এটি দেখায় যে ম্যাট্রিক্সের গুণটি সারি এবং কলামগুলির মধ্যে ডট পণ্য is

তারপর, আসলে হয় আবর্তিত অধিকার, এবং হয় আবর্তিত ঠিক আছে, ইত্যাদিv1v0vkvk-1

অন্য কোণ থেকে, হয় আবর্তিত বাঁদিকে, আর হয় আবর্তিত বাম, ইত্যাদিv1vnvnv1

কিভাবে এটা কাজ করে

ṙJṚæ.   input: z (a list of length n)
ṙJ      [rot(z,1), rot(z,2), ..., rot(z,n)] (to the left)
  Ṛ     [rot(z,n), ..., rot(z,2), rot(z,1)]
   æ.   [rot(z,n).z , ..., rot(z,2).z , rot(z,1).z] (dot product)




3

জেলি , 9 বাইট

LḶN⁸ṙæ×W€

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

একটি ফাংশন যা উল্লম্ব অ্যারে প্রদান করে। একটি সম্পূর্ণ প্রোগ্রাম হিসাবে এটি প্রদর্শিত হয় যেন এটি একটি অনুভূমিক অ্যারে ফিরিয়ে দেয়। অনুভূমিক অ্যারেটি ফিরিয়ে আনার জন্য আপনি LḶN⁸ṙ×⁸S€পরিবর্তে এটি করতে চাই ।



2

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

f v=sum.zipWith(*)v.fst<$>zip(iterate tail$v++v)v

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

একটি ইনপুট জন্য v=[1,2]

  • iterate tail$v++v তালিকা উত্পাদন করে [[1,2,1,2],[2,1,2],[1,2],[2],[],...]
  • fst<$>zip l vহিসাবে একই take(length v)lএবং ফলন[[1,2,1,2],[2,1,2]]
  • sum.zipWith(*)v প্রতিটি উপাদান ম্যাপ করা হয় এবং ভেক্টর-ম্যাট্রিক্স সারি পণ্য উত্পাদন।

আমার জবাবের চেয়ে অনেক স্মার্ট! আমি fst<$>zip l vখুব পছন্দ করি
jferard

2

আর , 66 62 বাইট

sapply(length(n<-scan()):1,function(i)c(n[-(1:i)],n[1:i])%*%n)

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


ব্যবহার Map(function(i)c(n[-(1:i)],n[1:i])%*%n,length(n<-scan()):1)3 বাইট ছোট হয়; এটি কেবল ম্যাট্রিকের একটি তালিকা ফেরত দেয়।
জিউসেপ

এবং লুপের for(i in seq(n<-scan()))F=c(c(n[-(1:i)],n[1:i])%*%n,F);F[1:i]জন্য একটি অদ্ভুত আউটপুট ফর্ম্যাট না দিয়ে 61 বাইট।
জিউসেপ

2

গণিত, 35 বাইট

Most@FoldList[RotateRight,#,1^#].#&

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

@ নয় গাছ থেকে বাইটস


2
এটি নিজেকে পুনরায় তৈরি করার চেয়ে ম্যাথমেটিকার নিজস্ব ম্যাট্রিক্সের গুণটি ব্যবহার করা কম Most@FoldList[RotateRight,#,1^#].#&। (তবে এর Foldপরিবর্তে দুর্দান্ত কৌশল Nest!)
একটি গাছ নয়




1

জে , 14 বাইট

+/ .*~#\.1&|.]

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

ব্যাখ্যা

+/ .*~#\.1&|.]  Input: array M
      #\.       Length of each suffix, forms the range [len(M), ..., 2, 1]
             ]  Identity, get M
         1&|.   For each 'x' in the suffix lengths, rotate left M  by 'x'
+/ .*~          Dot product with M

এটি বেশ সুন্দর। একটি প্রশ্ন. আপনি যখন তা করবেন 1&|.আপনি বন্ধনে নেই 1করার |., একটি একসংখ্যা তৈরি? তবে তারপরে আপনি সেই মোনাদটি বাম এবং ডান উভয় যুক্তি দিয়ে ব্যবহার করেন, এটি কতবার প্রয়োগ করা হবে তা নির্ধারণ করে বাম দিক দিয়ে। এখানে কি হচ্ছে?
জোনা

@ জোনাঃ এটির জন্য একটি বিশেষ ফর্ম &। যখন হিসাবে ব্যবহার করা হয় u n&f v, এটি সম্পাদন করছে (n&f)^:u v। এর আরও পার্স দেখতে বন্ডের নীচে দেখুন ।
মাইল

আহ, তিল আপনি কি এমন কিছু ব্যবহার করেন?
জোনা

@ জোনাঃ এটি অনেক ক্ষেত্রে গল্ফ করার জন্য দরকারী। এই ক্ষেত্রে, এটি র‌্যাঙ্ক ব্যবহার করে সমান সংখ্যক বাইটে করা যেতে পারে #\.|."{], তবে আমি বিকল্পটি চেষ্টা করার আগে সবচেয়ে সংক্ষিপ্ততম পোস্টটি দিয়েছিলাম যা আমি প্রথমে এসেছি।
মাইল 22

1

এপিএল, 17 বাইট

(↑¯1⌽(⍳≢)⌽¨⊂)+.×⍪

ব্যাখ্যা:

(↑¯1⌽(⍳≢)⌽¨⊂)+.×⍪

 ↑                      matrix format of
  ¯1⌽                   right rotate by 1 of
     (⍳≢)               the 1..[length N]
         ⌽¨             rotations of
           ⊂            the enclosed input
             +.×        inner product with
                ⍪       1-column matrix of input


1

হাস্কেল , 56 55 52 বাইট

f l=[sum$zipWith(*)l$drop i$l++l|i<-[0..length l-1]]

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

@ লাইকোনিকে ধন্যবাদ একটি বাইট সংরক্ষণ করা হয়েছে

তিনটি বাইট সংরক্ষণ করা হয়েছে: l++lপরিবর্তেcycle l


আপনি এটি দিয়ে একটি বাইট সংরক্ষণ করতে পারেন zipWith(*)l$drop i$cycle l
লাইকনি

1

হুশ , 11 বাইট

mΣ§‡*´ṀKoṫ¢

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

ব্যাখ্যা

mΣ§‡*´ṀKoṫ¢  Implicit input, e.g. [1,2,3]
          ¢  Cycle: [1,2,3,1,2,3,...
        oṫ   Tails: [[1,2,3,1,2,3...],[2,3,1,2,3...],[3,1,2,3...]...
     ´ṀK     Replace each element of input with input: [[1,2,3],[1,2,3],[1,2,3]]
   ‡*        Vectorized multiplication (truncated with respect to shortest list)
  §          applied to the last two results: [[1,4,9],[2,6,3],[3,2,6]]
mΣ           Sum of each row: [14,11,11]

1

অক্টাভা - 67 48 বাইট

এই কোডটি 19 বাইটে কমিয়ে দেওয়ার জন্য লুইস মেন্ডোকে ধন্যবাদ!

দ্রষ্টব্য: এই কোডটি কেবলমাত্র অক্টোভায় চলতে পারে। ম্যাটল্যাব এমন ক্রিয়াকলাপগুলির মধ্যে এমন ভাবগতিগুলিকে সমর্থন করে না যা একই সাথে সেগুলি তৈরি করা এক্সপ্রেশনগুলির মূল্যায়ন করার সময় ভেরিয়েবল তৈরি করতে পারে।

n=numel(a=input(''));a(mod((x=0:n-1)-x',n)+1)*a'

ম্যাটল্যাবের মূল কোডটি এখানে পাওয়া যাবে তবে ম্যাটল্যাবের যে কোনও সংস্করণে চালানো যেতে পারে। এই কোডটি 67 বাইট:

a=input('');n=numel(a)-1;a(mod(bsxfun(@minus,0:n,(0:n)'),n+1)+1)*a'

ব্যাখ্যা

  1. a=input('');- স্ট্যান্ডার্ড ইনপুটটির মাধ্যমে ব্যবহারকারীর কাছ থেকে একটি (সারি) ভেক্টর পান। আপনাকে অবশ্যই ভেক্টরটি অক্টেভ ফর্মে প্রবেশ করতে হবে (অর্থাত্ [1,2,3])।
  2. n=numel(...); - ইনপুট ভেক্টরের মোট উপাদানগুলির সংখ্যা পান।
  3. x=0:n-1- একটি সারি ভেক্টর তৈরি করে তা থেকে বৃদ্ধি 0পর্যন্ত n-11 পদক্ষেপে।
  4. (x=0:n-1)-x'- সম্প্রচারটি সম্পাদন করে যাতে আমাদের একটি n x nম্যাট্রিক্স থাকে যাতে প্রতিটি সারি i0 থেকে শুরু করে প্রতিটি সারিতে n-1প্রতিটি উপাদানকে iবিয়োগ করে দেয় i
  5. mod(..., n)+1- এটি নিশ্চিত করে যে কোনও মান যে নেতিবাচকভাবে আবৃত থাকে nযাতে প্রতিটি সারিতে i0 থেকে ভেক্টর থাকে এবং n-1 বৃত্তাকারে বাম দিকে সরানো হয়i উপাদান। আমরা 1 যোগ করি যেমন ম্যাটল্যাব / অক্টাভ 1 দিয়ে ভেক্টর বা ম্যাট্রিককে সূচীকরণ শুরু করে।
  6. a(...)- একটি n x nম্যাট্রিক্স তৈরি করে যেখানে (4) ব্যবহার করে আমরা প্রতিটি মান দ্বারা নির্ধারিত ইনপুট ভেক্টরের সঠিক সূচকগুলি অ্যাক্সেস করি (4) এভাবে আমাদের প্রয়োজনীয় ম্যাট্রিক্স অর্জন করতে হবে।
  7. (...)*a'- গুণণের aপূর্বে কলাম ভেক্টর হওয়ার জন্য স্থানান্তর / উল্টিয়ে ম্যাট্রিক্স ভেক্টর গুণকে সম্পাদন করে।

উদাহরণ রান

>> n=numel(a=input(''));a(mod((x=0:n-1)-x',n)+1)*a'
[1,2,3]

ans =

         14.00
         11.00
         11.00

>> n=numel(a=input(''));a(mod((x=0:n-1)-x',n)+1)*a'
[2,5,8,3]

ans =

        102.00
         80.00
         62.00
         80.00

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


এর পরিবর্তে অন্তর্নিহিত সম্প্রসারণ ব্যবহার করতে পারেন bsxfun। সংজ্ঞা nছাড়াই -1কিছু বাইটও সঞ্চয় করে। এবং যদি আপনি অষ্টাভে সীমাবদ্ধ থাকেন তবে আপনি ফ্লাইতে ভেরিয়েবলগুলি বরাদ্দ করতে পারেন aএবং আরও কিছু সংরক্ষণ করতে পারেন । এছাড়াও, আরো প্রায়ই এখানে আসা !! :-D0:n
লুইস মেন্ডো

@ লুইস মেন্ডো আহ হ্যাঁ আমি ভুলে গিয়েছি অক্টোটাভের ইতিমধ্যে সমর্থিত অন্তর্নিহিত সম্প্রসারণ রয়েছে। এছাড়াও inputফাংশনের ভিতরে ভেরিয়েবল সংরক্ষণ করা একটি দুর্দান্ত কৌশল। আমি মনে করি না যে এটি সমর্থন করতে পারে। আমি নিজের অভিজ্ঞতা থেকে এটি কেবল সি বা সি ++ এ দেখেছি। ধন্যবাদ!
রায়রিং - মনিকা

1
@ লুইস মেন্ডো আমি শীঘ্রই আপনার প্রস্তাবিত পরিবর্তনগুলি সম্পাদনা হিসাবে রাখব। আমি ব্যস্ত ছিলাম, তবে আমি এটিকে অগ্রাধিকার হিসাবে নিয়েছি না কারণ এই প্রবেশটি বাইট গণনায় অবশ্যই জিতবে না।
রায়রিং - মনিকা

পুনঃটুইট আপনাকে অনেক ধন্যবাদ :) আমি উপরের আমার ব্যাখ্যাটি পরিবর্তন করার সাথে সাথে কোডটি বুঝতে পেরেছি।
রায়রিং - মনিকা

খুশি আমি সাহায্য করতে পারলাম :-)
লুইস মেন্ডো

0

জাভাস্ক্রিপ্ট 79 বাইট

একটি ইনপুট অ্যারে নেয় এবং ম্যাট্রিক্স ভেক্টরের একটি অ্যারে আউটপুট দেয়

a=>(b=[...a],a.map(x=>([...b].reduce((m,n,i)=>m+=n*a[i],0,b.push(b.shift())))))

ব্যাখ্যা

a=>(
    b=[...a],                    // copy the input into b
    a.map(x=>(                   // transform a into a new array
        [...b].reduce(           // copy b into a new array and reduce
            (m,n,i)=>m+=n*a[i],  // memo += the element in the array * the ith
                                 // element in a
            0,                   // start memo at 0
            b.push(b.shift())    // shift the first element in b to the end
                                 // not used by reduce, but performing this op
                                 // here saves a few bytes
        )
    ))
)

0

ক্লোজার, 80 বাইট

#(map(fn[_ c](apply +(map * c %)))%(iterate(fn[c](into[(last c)](butlast c)))%))

iterateএকটি অসীম ক্রম উত্পাদন করে, তবে (take (count %) (iterate ...))এটি বন্ধ করার জন্য ব্যবহার করার পরিবর্তে আমি %অতিরিক্ত যুক্তি হিসাবে ব্যবহার করি map


0

পার্ল 5 , 65 + 1 (-a) = 66 বাইট

@o=@F;for(@o){$r=0;$r+=$_*$F[$i++%@F]for@o;say$r;unshift@F,pop@F}

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

ইনপুট ভেক্টরকে স্থান পৃথককারী সংখ্যা হিসাবে নিয়ে যায়। ফলাফল ভেক্টরকে উপস্থাপন করে আউটপুটস লাইনফিড বিচ্ছিন্ন সংখ্যা।



0

কমন লিস্প, 78 বাইট

(lambda(x)(loop as i on(append x x)as y in x collect(reduce'+(mapcar'* i x))))

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

অ্যারে (এই ক্ষেত্রে একটি পাতার মর্মর তালিকা) এবং বারবার সঙ্গে sublists উপর দ্বিগুন i(ব্যবহার xমাধ্যমে y, পুনরাবৃত্তির বন্ধ থাকবে)। তারপরে ( xপ্রতিটি iসংক্ষিপ্ত তালিকাটি শেষ হয়ে গেলে আবার থামবে) এর প্রতিটি উপাদানের সাথে প্রতিটি উপাদানকে গুণিত করার ফলাফলের সংক্ষিপ্তসার করে ফলাফলের পরবর্তী উপাদানটি গণনা করুন ।

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