使用json_encode处理多维数组

时间:2013-07-04 11:05:51

标签: php python json numpy

下面是我用来在python文件中传递两个矩阵进行乘法的python和php脚本 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)

这段代码为json_encode($ arr2)提供了正确的输出,但是它给了所有null.Can任何人都可以调试代码吗?

1 个答案:

答案 0 :(得分:0)

这是部分解决方案。我已经更正了python方面,这对我来说并不适合发布。

首先,我认为你应该能够通过编写自己的函数来增加PHP中的矩阵。

在PHP中进行矩阵乘法并不像处理JSON,python和启动新进程以及来回移动数据那样困难。

http://pear.php.net/package/Math_Matrix

处有一个用于矩阵乘法的非维护PHP库

好的,所以如果你想这样做,这里的Rube-Goldberg-ish方式是更正的python代码。它需要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,所以我会把那部分留给其他人。