ক্রোনেকার পণ্য গণনা করুন


11

সম্পর্কিত , তবে খুব আলাদা।


নীচের উদাহরণগুলিতে, Aএবং B2-বাই -2 ম্যাট্রিক হবে এবং ম্যাট্রিকগুলি এক সূচকযুক্ত।

একটি ক্রোনেকার পণ্য নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

A⊗B =  A(1,1)*B   A(1,2)*B
        A(2,1)*B   A(2,2)*B

     =  A(1,1)*B(1,1)   A(1,1)*B(1,2)   A(1,2)*B(1,1)   A(1,2)*B(1,2)
        A(1,1)*B(2,1)   A(1,1)*B(2,2)   A(1,2)*B(2,1)   A(1,2)*B(2,2)
        A(2,1)*B(1,1)   A(2,1)*B(1,2)   A(2,2)*B(1,1)   A(2,2)*B(1,2)
        A(2,2)*B(2,1)   A(2,2)*B(1,2)   A(2,2)*B(2,1)   A(2,2)*B(2,2)

চ্যালেঞ্জ: দুটি ম্যাট্রিক দেওয়া, Aএবং B, ফেরত A⊗B

  • ম্যাট্রিকের আকার কমপক্ষে হবে 1-by-1। আপনার কম্পিউটার / ভাষা ডিফল্টরূপে পরিচালনা করতে পারে তবে সর্বাধিক আকার হবে তবে সর্বনিম্ন 5-by-5ইনপুট।
  • সমস্ত ইনপুট মানগুলি অ-নেতিবাচক পূর্ণসংখ্যার হবে
  • ক্রোনেকার পণ্য বা টেনসর / আউটার পণ্য গণনা করে এমন বিল্টিন ফাংশন অনুমোদিত নয়
  • সাধারণভাবে: I / O ফর্ম্যাট, প্রোগ্রাম এবং ফাংশন, লুফোলস ইত্যাদি সম্পর্কিত স্ট্যান্ডার্ড নিয়ম

পরীক্ষার কেস:

A =   
     1     2
     3     4    
B =    
     5     6
     7     8    
A⊗B =    
     5     6    10    12
     7     8    14    16
    15    18    20    24
    21    24    28    32

B⊗A =    
     5    10     6    12
    15    20    18    24
     7    14     8    16
    21    28    24    32
------------------------
A =    
     1
     2
B =    
     1     2

A⊗B =    
     1     2
     2     4
------------------------
A =    
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

B =    
     1     1
     0     1

A⊗B  =    
    16    16     2     2     3     3    13    13
     0    16     0     2     0     3     0    13
     5     5    11    11    10    10     8     8
     0     5     0    11     0    10     0     8
     9     9     7     7     6     6    12    12
     0     9     0     7     0     6     0    12
     4     4    14    14    15    15     1     1
     0     4     0    14     0    15     0     1

B⊗A =    
    16     2     3    13    16     2     3    13
     5    11    10     8     5    11    10     8
     9     7     6    12     9     7     6    12
     4    14    15     1     4    14    15     1
     0     0     0     0    16     2     3    13
     0     0     0     0     5    11    10     8
     0     0     0     0     9     7     6    12
     0     0     0     0     4    14    15     1
------------------------

A = 2
B = 5
A⊗B = 10

উত্তর:


1

জেলি, 10 9 বাইট

×€€;"/€;/

বাটনার অ্যালগরিদম ব্যবহার করে ( üএকটি eeশব্দ করার চেষ্টা করার সময় উচ্চারিত হয় [মিলিত হিসাবে] একটি ooশব্দের মুখের আকারে [বুট হিসাবে])

;"/€;/দ্বারা অনুপ্রাণিত হয় ডেনিস মিচেল । এটি মূলত Z€F€€;/(যার দাম আরও একটি বাইট)।


1
বা, আইপিএতে, / y /
লুইস মেন্ডো

প্রত্যেক ব্যক্তি আইপিএ জানেন না।
লিকি নুন

4
মার্টিনের শেষ নামটি কীভাবে উচ্চারণ করা যায় তার ব্যাখ্যার জন্য ধন্যবাদ। এটি অত্যন্ত প্রাসঙ্গিক। : পি
অ্যালেক্স এ।

আচ্ছা এটি আমি শ্রদ্ধা প্রদর্শন করি কীভাবে ...
লিকি নুন

;/এখন হতে পারে । (বৈশিষ্ট্য
পোস্টডেটস

6

সিজেম, 13 বাইট

{ffff*::.+:~}

এটি একটি নামবিহীন ব্লক যা স্ট্যাকের উপরে দুটি ম্যাট্রিকের প্রত্যাশা করে এবং তাদের ক্রোনেক্কার পণ্যটি তাদের জায়গায় রেখে দেয়।

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

ব্যাখ্যা

এটি পূর্ববর্তী উত্তর থেকে ক্রোনেকার পণ্যের অংশ , সুতরাং আমি এখানে কেবলমাত্র পূর্ববর্তী ব্যাখ্যার প্রাসঙ্গিক অংশগুলি পুনরুত্পাদন করছি:

তালিকা ম্যানিপুলেশনের জন্য সিজেমের ইনফিক্স অপারেটরগুলির একটি দ্রুত ওভারভিউ এখানে দেওয়া হয়েছে:

  • fস্ট্যাকের উপরে একটি তালিকা এবং অন্য কিছু প্রত্যাশা করে এবং তালিকার উপরের বাইনারি অপারেটরটিকে ম্যাপ করে , দ্বিতীয় আর্গুমেন্ট হিসাবে অন্যান্য উপাদানকে পাস করে। যেমন [1 2 3] 2 f*এবং 2 [1 2 3] f*উভয় দিতে [2 4 6]। উভয় উপাদান তালিকাভুক্ত হলে, প্রথমটি ম্যাপ করা হয় এবং দ্বিতীয়টি বাইনারি অপারেটরটি কারি করতে ব্যবহৃত হয়।
  • :দুটি ব্যবহার রয়েছে: অপারেটরটিকে অনুসরণ করে যদি এটি অকার্যকর হয় তবে এটি একটি সাধারণ মানচিত্র। যেমন [1 0 -1 4 -3] :zহয় [1 0 1 4 3], যেখানে zএকটি সংখ্যা মডুলাস পায়। এটি অনুসরণকারী অপারেটরটি যদি বাইনারি হয় তবে এটি অপারেটরটির পরিবর্তে ভাঁজ হবে। যেমন [1 2 3 4] :+হয় 10
  • .একটি বাইনারি অপারেটর ভেক্টরাইজস এটি আর্গুমেন্ট হিসাবে দুটি তালিকাকে প্রত্যাশা করে এবং অপারেটারটিকে সংশ্লিষ্ট জোড়গুলিতে প্রয়োগ করে। যেমন [1 2 3] [5 7 11] .*দেয় [5 14 33]
ffff*  e# This is the important step for the Kronecker product (but
       e# not the whole story). It's an operator which takes two matrices
       e# and replaces each cell of the first matrix with the second matrix
       e# multiplied by that cell (so yeah, we'll end up with a 4D list of
       e# matrices nested inside a matrix).
       e# Now the ffff* is essentially a 4D version of the standard ff* idiom
       e# for outer products. For an explanation of ff*, see the answer to
       e# to the Kronecker sum challenge.
       e# The first ff maps over the cells of the first matrix, passing in the 
       e# second matrix as an additional argument. The second ff then maps over 
       e# the second matrix, passing in the cell from the outer map. We 
       e# multiply them with *.
       e# Just to recap, we've essentially got the Kronecker product on the
       e# stack now, but it's still a 4D list not a 2D list.
       e# The four dimensions are:
       e#   1. Columns of the outer matrix.
       e#   2. Rows of the outer matrix.
       e#   3. Columns of the submatrices.
       e#   4. Rows of the submatrices.
       e# We need to unravel that into a plain 2D matrix.
::.+   e# This joins the rows of submatrices across columns of the outer matrix.
       e# It might be easiest to read this from the right:
       e#   +    Takes two rows and concatenates them.
       e#   .+   Takes two matrices and concatenates corresponding rows.
       e#   :.+  Takes a list of matrices and folds .+ over them, thereby
       e#        concatenating the corresponding rows of all matrices.
       e#   ::.+ Maps this fold operation over the rows of the outer matrix.
       e# We're almost done now, we just need to flatten the outer-most level
       e# in order to get rid of the distinction of rows of the outer matrix.
:~     e# We do this by mapping ~ over those rows, which simply unwraps them.

3
আপনার কোডটি প্রায় এক আইপিভি 6 ঠিকানার মতো দেখাচ্ছে
ডিজিটাল ট্রমা

4

ম্যাটল্যাব / অষ্টাভে, 83 42 বাইট

সংরক্ষিত 41 বাইট, FryAmTheEggman ধন্যবাদ!

@(A,B)cell2mat(arrayfun(@(n)n*B,A,'un',0))

এখানে পরীক্ষা!

ভাঙ্গন

arrayfunদ্বিতীয় আর্গুমেন্ট দ্বারা সংজ্ঞায়িত n*Bভেরিয়েবলের জন্য, একটি ছদ্মবেশী-লুপ যা বহুগুণ nহয়। এটি কাজ করে কারণ 2 ডি ম্যাট্রিক্সের মাধ্যমে লুপিং একটি ভেক্টরের মাধ্যমে লুপিংয়ের সমান। অর্থাত for x = Aহিসাবে একই for x = A(:)

'un',0আরও ভার্বোজের সমতুল্য 'UniformOutput', False, এবং নির্দিষ্ট করে যে আউটপুটে স্কেলারের পরিবর্তে কোষ রয়েছে।

cell2mat কোষগুলিকে আবার একটি সংখ্যাসূচক ম্যাট্রিক্সে রূপান্তর করতে ব্যবহৃত হয়, যা পরে আউটপুট হয়।


আপনি arrayfunযেমনটি বলছেন তেমনভাবে লুপগুলি স্পষ্ট করে স্পষ্ট করে দেখা উচিত , যেমন ম্যাট্রিক্সটি ভেক্টর ছিল, তবে forতা নয় (এটি অ্যারের কলামগুলিতে লুপ করে )
লুইস মেন্ডো

1

পাইথ, 14 12 11 বাইট

JEsMs*RRRRJ

জেলি উত্তরের অনুবাদ , যা বাটনার অ্যালগোরিদমের উপর ভিত্তি করে ( শব্দটি [যখন মিলিত হওয়ার সময়] একটি শব্দের মুখের আকারে [বুট হিসাবে ] শব্দ üকরার চেষ্টা করার সময় উচ্চারিত ))eeoo

এটি অনলাইনে ব্যবহার করে দেখুন (পরীক্ষার কেস 1)!

বোনাস: B⊗Aএকই সংখ্যক বাইটে গণনা করুন

JEsMs*LRLRJ

এটি অনলাইনে ব্যবহার করে দেখুন (পরীক্ষার কেস 1)!


1

জুলিয়া, 40 39 37 বাইট

A%B=hvcat(sum(A^0),map(a->a*B,A')...)

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

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

  • ম্যাট্রিক্স জন্য একটি এবং বি , map(a->a*B,A')Kronecker পণ্য নির্ণয় A⊗B

    ফলাফল বি এর মাত্রা সহ ম্যাট্রিক্স ব্লকের একটি ভেক্টর ।

    ম্যাট্রিকগুলি কলাম-প্রধান ক্রমে সংরক্ষণ করা হওয়ায় আমাদের (সহ ') স্থানান্তর করতে হবে।

  • sum(A^0) এর মাত্রাগুলির পরিচয় ম্যাট্রিক্সের সমস্ত এন্ট্রিগুলির যোগফল গণনা করে । একটি n × n ম্যাট্রিক্স এ এর জন্য , n দেয়

  • প্রথম আর্গুমেন্ট সঙ্গে এন , hvcatযোগসূত্র এন ম্যাট্রিক্স ব্লক অনুভূমিকভাবে, এবং তার ফলে (বৃহত্তর) উল্লম্বভাবে ব্লক।


0

জে, 10 বাইট

এটি একটি সম্ভাব্য বাস্তবায়ন।

[:,./^:2*/

জে, 13 বাইট

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

[:,./^:2*"0 _

ব্যবহার

   f =: <either definition>
    (2 2 $ 1 2 3 4) f (2 2 $ 5 6 7 8)
 5  6 10 12
 7  8 14 16
15 18 20 24
21 24 28 32
   (2 1 $ 1 2) f (1 2 $ 1 2)
1 2
2 4
   2 f 5
10

0

জাভাস্ক্রিপ্ট (ES6), 79

নেস্টেড লুপিংয়ের সাথে সরাসরি বাস্তবায়ন

(a,b)=>a.map(a=>b.map(b=>a.map(y=>b.map(x=>r.push(y*x)),t.push(r=[]))),t=[])&&t

পরীক্ষা

f=(a,b)=>a.map(a=>b.map(b=>a.map(y=>b.map(x=>r.push(y*x)),t.push(r=[]))),t=[])&&t

console.log=x=>O.textContent+=x+'\n'

function show(label, mat)
{
  console.log(label)
  console.log(mat.join`\n`)
}

;[ 
  {a:[[1,2],[3,4]],b:[[5,6],[7,8]] },
  {a:[[1],[2]],b:[[1,2]]},
  {a:[[16,2,3,13],[5,11,10,8],[9,7,6,12],[4,14,15,1]],b:[[1,1],[0,1]]},
  {a:[[2]],b:[[5]]}
].forEach(t=>{
  show('A',t.a)  
  show('B',t.b)
  show('A⊗B',f(t.a,t.b))
  show('B⊗A',f(t.b,t.a))  
  console.log('-----------------')
})
<pre id=O></pre>

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