2 votes

traiter les tableaux multidimensionnels avec json_encode

Ci-dessous sont les scripts que j'ai utilisés pour passer deux matrices pour la multiplication dans le fichier python. PHP :

$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)

Ce code donne une sortie correcte pour json_encode($arr2) mais le reste donne tous les null.quelqu'un peut-il déboguer le code ?

0voto

Paul Points 5437

Voici une solution partielle. J'ai corrigé le côté python, qui ne fonctionnait pas pour moi comme affiché.

Tout d'abord, je pense que vous devriez être capable de multiplier des matrices en PHP en écrivant votre propre fonction.

Il ne peut pas être aussi difficile de faire une multiplication matricielle en PHP que de gérer JSON, python, et de démarrer un nouveau processus et de déplacer les données dans les deux sens.

Il existe une bibliothèque PHP non maintenue pour la multiplication de matrices à l'adresse suivante http://pear.php.net/package/Math_Matrix

Ok, donc si vous voulez le faire à la manière de Rube-Goldberg, voici le code python corrigé. Il a besoin d'imports pour json et sys, et .tolist() pour gérer l'encodage du résultat de la matrice par json (json n'encodera pas la matrice telle quelle parce qu'elle n'est pas un simple tableau). J'ai écarté la bibliothèque de test unitaire pour numpy.matrix en faveur de l'utilisation de la surcharge * au lieu de 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())

Il s'agit d'un prototype de test. Pour une version "production", vous devez supprimer toutes les impressions, sauf la dernière.

Test de fonctionnement :

./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]]

semble bien.

Je n'ai pas écrit de PHP depuis plus de 10 ans, je vais donc laisser cette partie à quelqu'un d'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X