Matrix multiplication: Difference between revisions

Content added Content deleted
Line 2,749: Line 2,749:
{def mat*mat
{def mat*mat
{lambda {:a :b}
{lambda {:a :b}
{#.new {map {{lambda {:a :b :i} // loop on row
{A.new {S.map {{lambda {:a :b :i} // loop on :i
{#.new {map {{lambda {:a :b :i :j} // loop on col
{A.new {S.map {{lambda {:a :b :i :j} // loop on :j
{+ {map {{lambda {:a :b :i :j :k} // sum of prod
{+ {S.map {{lambda {:a :b :i :j :k} // loop on :k
{* {#.get {#.get :a :i} :k} // of a[i,k]
{* {A.get :k {A.get :i :a}} // a[i,k]*b[k,j]
{#.get {#.get :b :k} :j}} // and b[k,j]
{A.get :j {A.get :k :b}}}
} :a :b :i :j} {serie 0 {- {#.length :b} 1}} }}
} :a :b :i :j} {S.serie 0 {- {A.length :b} 1}} }}
} :a :b :i} {serie 0 {- {#.length {#.get :b 0}} 1}} }}
} :a :b :i} {S.serie 0 {- {A.length {A.get 0 :b}} 1}} }}
} :a :b} {serie 0 {- {#.length :a} 1}} }
} :a :b} {S.serie 0 {- {A.length :a} 1}} }
}}}
}}}
-> mat*mat
{def A {#.new {#.new 1 2}

{#.new 3 4}
{#.new 5 6}
{def A {A.new {A.new 1 2}
{#.new 7 8}}} = [[1,2],[3,4],[5,6],[7,8]]
{A.new 3 4}
{def B {#.new {#.new 1 2 3}
{A.new 5 6}
{#.new 4 5 6}}} = [[1,2,3],[4,5,6]]
{A.new 7 8}}}
-> A
{def B {A.new {A.new 1 2 3}
{A.new 4 5 6}}}
-> B


{mat*mat {A} {B}}
{mat*mat {A} {B}}
-> [[ 9,12,15],
-> [[9,12,15],
[19,26,33],
[19,26,33],
[29,40,51],
[29,40,51],