簡體   English   中英

用json_encode處理多維數組

[英]dealing multi-dimension arrays with json_encode

以下是我用來在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";

蟒蛇:

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)提供了正確的輸出,但是剩下的全部為空。有人可以調試代碼嗎?

這是部分解決方案。 我已經更正了python方面,該方面對我來說不起作用。

首先,我認為您應該能夠通過編寫自己的函數在PHP中乘以矩陣。

在PHP中進行矩陣乘法並沒有像處理JSON,python,啟動新進程以及來回移動數據那樣困難。

http://pear.php.net/package/Math_Matrix上有一個無需維護的用於矩陣乘法的PHP庫。

好的,因此,如果您要執行此操作,請使用經過修正的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了,所以我將把這部分留給別人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM