2

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

此代码为 json_encode($arr2) 提供了正确的输出,但其余部分为空。任何人都可以调试代码吗?

4

1 回答 1

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

看起来不错。

我已经 10 多年没有写过任何 PHP 了,所以我将把这部分留给其他人。

于 2013-07-04T21:22:19.157 回答