2013-07-04 2 views
2

Ниже Питон и PHP скрипты, которые я использовал, чтобы передать две матрицы для умножения в питона файл PHP:занимающихся Многомерные массивы с json_encode

$arr2=array(array(array(1,2),array(3,5)) ,array(array(4,6)array(2,7))) 
echo json_encode($arr2); 
$rtu= shell_exec("C:/Python27/python 1234.py ".json_encode($arr2)); 
echo $rtu."\n"; 

Python:

import numpy as np 
from numpy.core.umath_tests import matrix_multiply 
from numpy import matrix 
print json.loads(sys.argv[1]) 
arr=json.loads(sys.argv[1]) 
arr1=arr[0] 
arr2=arr[1] 
print arr1 
print arr2 
A=np.asmatrix(arr1) 
print A 
B=np.asmatrix(arr2) 
print B 
Z1 = matrix_multiply(A,B) 

print json.dumps(Z1) 

Этот код дает правильный результат для json_encode ($ arr2), но остальное он дает все null. Может кто-нибудь отлаживает код?

+0

$ arr2, кажется, создает очень сложный вложенный массив, либо существует типографская ошибка. Есть несколько частей, которые должны работать правильно. Я думаю, вы должны попытаться размножить две постоянные матрицы сначала в одном python. Как A = [[1, 0], [0,2]] и B = [[1,2], [3,4]]. Затем измените формат ввода python на JSON. Затем проверьте, что PHP создает те же матрицы, что и для отправки на python. – Paul

+0

@Paul Я сделал, что они отлично работают – abcdxx

ответ

0

Это частичное решение. Я скорректировал сторону python, которая не работала для меня как опубликованная.

Во-первых, я думаю, вы должны иметь возможность умножить матрицы на PHP, написав свою собственную функцию.

Непросто сделать умножение матриц в PHP, так как оно связано с JSON, python и началом нового процесса и перемещением данных вперед и назад.

Существует PHP библиотека не сопровождается для матричного умножения на http://pear.php.net/package/Math_Matrix

Итак, если вы хотите, чтобы это сделать это деревенщина-Goldberg-иш путь здесь исправленный код питона. Им нужен импорт для json и sys и .tolist() для обработки json для кодирования результата матрицы (json не будет кодировать матрицу как есть, потому что это не простой массив). Я отбросил библиотеку единиц измерения для numpy.matrix в пользу использования перегруженного * вместо matrix_multiply.

#!/usr/bin/python 
import json 
import sys 
import numpy as np 
from numpy import matrix 
print json.loads(sys.argv[1]) 
arr=json.loads(sys.argv[1]) 
arr1=arr[0] 
arr2=arr[1] 
print arr1 
print arr2 
A=np.asmatrix(arr1) 
print A 
B=np.asmatrix(arr2) 
print B 
Z1 = A*B 
print Z1 
print json.dumps(Z1.tolist()) 

Это прототип испытания. Для «производственной» версии вы должны удалить все отпечатки, кроме последней.

Пробное:

./matrix_multiply.py "[[[2,0],[0,1]],[[1,3],[2,4]]]" 
[[[2, 0], [0, 1]], [[1, 3], [2, 4]]] 
[[2, 0], [0, 1]] 
[[1, 3], [2, 4]] 
[[2 0] 
[0 1]] 
[[1 3] 
[2 4]] 
[[2 6] 
[2 4]] 
[[2, 6], [2, 4]] 

выглядит отлично.

Я не писал ни одного PHP за 10 лет, поэтому я оставлю эту часть кому-то еще.

Смежные вопросы