2016-12-07 7 views
0

PHPで配列を使って行列乗算を行いたい行列の乗算の代わりに同じ起こっている出力ごとの単純な乗算は、私がそれを解決するのを助けてください。私はPHPで行列乗算コードを作成しようとしていますが、行列の乗算の代わりに行と列を使った単なる乗算が発生します

は、ここに私のコードです:

<?php 
$a1 = Array('0' => Array('0' => 1,'1' => 2),'1' => Array('0' => 4,'1' => 5)); 

$a2 = Array('0' => Array('0' => 7,'1' => 5),'1' => Array('0' => 3,'1' => 2)); 

$sumArray = array(); 

$result = array(); 
for($i=0; $i<=1; $i++) 
{ 
    for($j=0; $j<=1; $j++) 
    { 
     $result[$i][$j] = $a1[$i][$j] * $a2[$i][$j]; 
    } 
} 
echo "<pre/>"; 
print_r($result); 
?> 

出力:

array image

+0

(i = 0; iは2 <; iは++)用 { (J = 0であり、j <2、J ++) { C [I] [J] = 0; i] [j] +(a [i] [k] * b [k] [j]);(k = 0; k <3; } } } – dev21

+0

このリンクを確認http://programmingincplus.blogspot.in/2012/09/multiplication-of-two-2d-matrix.html – dev21

答えて

1
<?php 



$a = Array('0' => Array('0' => 1,'1' => 2),'1' => Array('0' => 4,'1' => 5)); 


$b = Array('0' => Array('0' => 7,'1' => 5),'1' => Array('0' => 3,'1' => 2)); 

$sumArray = array(); 

$c = array(); 

for($i=0;$i<2;$i++) { 
for($j=0;$j<2;$j++) 
{ 
    $c[$i][$j]=0; 
    for($k=0;$k<2;$k++) 
     { $c[$i][$j]=$c[$i][$j]+($a[$i][$k]*$b[$k][$j]); 
    } 
} 
} 


echo "<pre/>"; 
print_r($c); 
?> 
0

行列の乗算は、以下のように実装されています

for i = 1..N 
    for j = 1..N 
    result[i][j] = 0. 
    for k = 1..N 
     result[i][j] += array1[i][k] * array2[j][k] // "row times column" 
    end for 
    end for 
end for 

私は右のあなたの質問を得た願っています。行列 - 乗算には3つのfor-loopが必要です。用

+0

申し訳ありませんが、3 * 3のMxMはどういう意味ですか? 3つの2次行列を掛けたいですか? 'result = A * B * C'? – Kapa11

+0

さて、3つの行列を互いに乗算したい場合は、sthを使います。このように(C++コード): – Kapa11

+0

fctを書いてください。これは引数として2つの行列をとり、行列積を返します(このアルゴリズムの実装は私の答えでは 'result'を返します)。次に、このfctを2回呼び出して3つの行列を掛けます(2番目の呼び出しでは、(A * B)の出力にCを掛けます)。 – Kapa11