在三维数组中搜索最近的具有特定值的“单元格”

2024-09-28 05:28:30 发布

您现在位置:Python中文网/ 问答频道 /正文

请注意,我对stack overflow还不熟悉,可能会在技术上有点错误。如果有,请指出

我一直在写一个计划,旨在模拟一种疾病(流感)将如何通过我的a级NEA的人口传播。很多都是围绕着一个3D数组构建的,这个数组代表了一个城镇的许多部分,二维像网格视图(类似于象棋或文明4等),第三个数组存储着关于2D单元格的信息(例如每个2D单元格的第一个值是人口,第二个值是区域类型,第三个值是感染量等)。代码的一部分表示从一个单元格移动到另一个单元格的人,需要知道最近的二维单元格在哪里,该单元格的第三维中包含某个值。实际上,这基本上会告诉计算机最近的工作/娱乐场所在哪里

例如,在一个数组(如4x4x4数组)中,除了随机的1之外,所有的数组都有0(我在程序中使用整数,因为它们在最终乘积中有2种以上的可能性),它会遍历每个二维单元格,在第三维的第二个值中找到最接近它当前所在的二维单元格的1,并将其存储在数组中,然后转到下一个

这是我迄今为止的代码:(子例程之前的所有内容在final中都会有所不同)

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

有没有办法提高效率?行吗


Tags: 代码trueif数组else人口xcwhile

热门问题