在3d数组中搜索具有特定值的最近“单元格” - python

时间:2016-11-08 14:49:55

标签: python arrays

请注意,我是堆栈溢出的新手,可能会遇到一些技术问题。如果我这样做,请指出它们

我一直在编写一个程序,旨在模拟疾病(流感)如何通过我的a-level NEA的人群传播。其中很多是围绕一个3D阵列构建的,该阵列代表一个城镇的许多部分,其中2个维度的行为类似于网格视图(类似于国际象棋或文明4等),第3个存储有关2D单元的信息(例如第一个值)每2d细胞是人口,第二是区域类型,第3是感染量等。代表人们从一个单元移动到另一个单元的代码的一部分,需要知道最近的2D单元在哪里包含在其第三维内的特定值。在实践中,这基本上会告诉计算机最近的工作/娱乐场所。

例如在一个4乘4乘4阵列的数组中,除了随机1s之外都是0(我在程序中使用整数,因为它们在最终产品中将超过2种),它会去虽然每个2D单元格在第三维中找到第二个值中最接近的1到它当前所在的第二个单元格,但是将它存储在数组中,然后移动到下一个单元格。

到目前为止,这是我的代码:(子程序之前的所有内容在最后都是不同的)

townLayout=[[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]],[[],[],[],[],[]]]

import random

b=0
while b<5:
    i=0
    while i<5:#double loop to create 2 dimentions
        townLayout[b][i]=[0,ran.ranint(1,4),0,0,0,15,15,0,15,15,0]
        i+=1
    b+=1
def nearestWork(townLayout):#anitate
    b=0
    isThere=True
    while b<5 and isThere==True:
        i=0
        xc=15
        yc=15
        dxc=15
        dx=15
        dyc=15
        dy=15
        while i<5 and isThere=True:
            multiple=False
            x=0
            isThere=False
            while x<5:
                y=0
                while y<5:
                    if townLayout[b][i][1]==4:
                        isThere=True
                        if xc>=b:
                            dxc=xc-b
                        else:
                            dxc=b-xc
                        if yc>=i:
                            dyc=yc-b
                        else:
                            dyc=b-yc
                        if x>=b:
                            dx=x-b
                        else:
                            dx=b-x
                        if y>=b:
                            dy=y-b
                        else:
                            dy=b-y
                        if (dx+dy)<(dxc+dyc):
                            xc=x
                            yc=y
                        elif (dx+dy)==(dxc+dyc):
                            Multiple=True
                    y+=1
                x+=1
            if isThere==True:
                townLayout[b][i][8]=xc
                townLayout[b][i][9]=yc
            else:
                print('no places of work detected')
                break
            if Multiple==True:
                townLayout[b][i][10]=1
            i+=1
        b+=1
    return townLayout

有没有办法让这更有效率?它会起作用吗?

0 个答案:

没有答案