在python中,最好是作为numpy数组,我如何才能在php中获得完全像这样的数据结构:
$mdmat = array();
for($i=0;$i<50;$i++)
for($x=90;$x<=510;$x+=30)
for($y=50;$y<470;$y+=30)
$mdmat[$i][$x][$y] = rand(0,1000);
所以我以后可以像这样更改其元素的值:
$mdmat[1][120][80]= 5;
我完全需要那些数组索引。
这是该结构的转储: https://gist.github.com/acosonic/68333d286b5684e42fbdf5b28bcf9101
答案 0 :(得分:1)
您正在跳过内部循环中的索引。如果您希望保留它,那么它实际上不是数组,而是键值对映射(又名字典)。
字典中不能有可变键,但是可以使用元组。
import random
mdmat = {}
for i in range(0, 50):
for x in range(90, 510 + 1, 30): #the +1 is to handle <= condition, range are right exclusive
for y in range(50, 470, 30):
mdmat[(i, x, y)] = random.randint(0,1000)
编辑: 查看您的编辑内容,您可以稍作调整即可实现与嵌套字典相同的概念。
import random
mdmat_root = {}
for i in range(0, 50):
mdmat_root[i] = {}
for x in range(90, 510 + 1, 30): #the +1 is to handle <= condition, range are right exclusive
mdmat_root[i][x] = {}
for y in range(50, 470, 30):
mdmat_root[i][x][y] = random.randint(0,1000)
答案 1 :(得分:0)
您可以使用np.random.randint
轻松地进行操作,如下所示,您可以将(3,3,3)
替换为所需的矩阵大小(i, j, k)
。
array = np.random.randint(0, 1000, (3,3,3))
print (array)
[[[581 956 971]
[726 64 140]
[891 83 666]]
[[690 554 869]
[325 611 908]
[560 221 550]]
[[878 979 488]
[233 710 979]
[273 462 945]]]
,然后根据需要使用
进行修改array[1][2][2] = 100
print (array)
[[[581 956 971]
[726 64 140]
[891 83 666]]
[[690 554 869]
[325 611 908]
[560 221 100]]
[[878 979 488]
[233 710 979]
[273 462 945]]]
对于您的特定情况,您可以将矩阵的大小计算为i,j,k,然后使用
i = 50
x = len(range(90, 511, 30))
y = len(range(50, 471, 30))
array = np.random.randint(0, 1000, (i,x,y))
您基本上在PHP中使用90、120、150、180 ...作为索引,但是在python中,您将不得不使用连续索引,其中90-> 0,120-> 1,150-> 2, 180-> 3,依此类推。因此,对于x
和y
,您只需要15个索引(PHP中x和y数组的长度)