我有一个PHP中矩阵乘法逻辑的问题;数据以一维数组(Array ( [0] => 1.0000 [1] => 0.5000 [2] => 3.0000 [3] => 2.0000 [4] => 1.0000 [5] => 5.0000 [6] => 0.3333 [7] => 0.2000 [8] => 1.0000 )
)的形式来自数据库,我需要将其转换为矩阵。原始数组的维数是一个平方数(在本例中为9),因此结果矩阵将具有两个相等的维度,两者都等于原始数据数组的平方根(3)。
结果矩阵必须乘以自身,使用下图中的模式:
我在模型中使用以下代码来创建算法:
function hitung_matriks(){
$query = $this->db->query("select * from banding b
inner join kriteria a on a.Kd_Kriteria1 = b.Kd_Kriteria1");
$dt_matriks = $query->result();
$data = array();
foreach($dt_matriks as $a){
$data[] = $a->Nilai_Banding;
}
echo "<pre>";
print_r($data);
echo "</pre>";
$c = array();
for($i=1;$i<=sqrt(count($data));$i++){
$d = array();
$isi=0;
for($j=1;$j<=sqrt(count($data));$j++){
$isi = $data[$i][$j] * $data[$j][$i];
$d[] = $isi;
}
$c[] = $d;
}
echo "<pre>";
print_r($c);
echo "</pre>";die();
}
,每个数组的结果为0。
我想让这段代码看起来像这样:
请帮助我:&#39;(
答案 0 :(得分:0)
sqrt()函数用于计算平方根。如果要循环播放数组中的所有元素,请删除sqrt()
调用。
在PHP中,数组通常是从零开始的索引,因此您需要替换$i=1
,$j=1
从for循环中的0开始。
答案 1 :(得分:0)
更新的答案: 将 $ data 数组转换为矩阵的方法:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
var response = {
"total_rows": 2,
"offset": 0,
"rows": [
{
"id": "5",
"key": "5",
"value": {
"rev": "1-b26014051b18bce04ae2190d9cb92d81"
},
"doc": {
"_id": "5",
"_rev": "1-b26014051b18bce04ae2190d9cb92d81",
"dataid": "5",
"dataname": "Robin",
"dataquote": "Blah"
}
},
{
"id": "9",
"key": "9",
"value": {
"rev": "1-8ecbf37d0ccc129530e57747b46faa8e"
},
"doc": {
"_id": "9",
"_rev": "1-8ecbf37d0ccc129530e57747b46faa8e",
"dataid": "9",
"dataname": "Bert",
"dataquote": "Hallo"
}
}
]
};
$scope.persons = response.rows;
}
关于矩阵乘法,我找到了这篇有趣的帖子:http://sickel.net/blogg/?p=907 使用那里找到的确切函数:
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller="MyCtrl">
<p class="lead">Persons</p>
<ul>
<li ng-repeat="p in persons"><a ng-href="#/quotes/{{ p.doc.dataid }}">{{ p.doc.dataname }}</a></li>
</ul>
</div>
</body>
</html>
结果非常接近所需的模式:
$data = array(1.0000, 0.5000, 3.0000, 2.0000, 1.0000, 5.0000, 0.3333, 0.2000, 1.0000);
$data2 = array();
$j = 0;
$k = 0;
for($i=0;$i<count($data);$i++){
if($j < sqrt(count($data)) ){
$data2[$j][$k] = $data[$i];
$j++;
}else{$j = 0; $k++;}
}
略有差异来自舍入方法。如果这是一个问题,请参阅round()功能。