TLDR:我想从中心开始在2D数组中导航所有方向
我尝试在2dpython数组中执行特定的导航。假设我有这个2D数组(A1):
我想在这个数组中导航,并对A1*A2的索引应用索引求和,其中A2是另一个2D数组(A2):
当应用求和时,我希望当前索引从第二个2D数组的中心开始。所以在A1[0][0](1)处,我想用A2(A21,或0)的中心。然后,我要移动第二个数组中的每个项目并继续此过程:
1(0)+2(1)+5(2)+6(1)
这将处理A2[中心x][中心y]中的所有项目。然后,我想双倍返回,并添加所有低于中心的值。下面是一张说明我要做什么的快速图像,其中一张显示了我们出界的情况,以及在边界上的情况:
我要做的是编写一个函数,它将从二维数组的中心向该二维数组的每个方向导航。下面是我的代码:
for row in range(A1.length):
for column in range(A1[0].length):
cRow = 0
pSum = 0
kRow = midRow - 1
while kRow < A2.length and row + kRow < A1.length:
kColumn = midColumn - 1
cColumn = 0
while kColumn < A2[0].length and column + kColumn < A1[0].length:
pSum += float(A1[row + cRow][column + cColumn] * A2[kRow][kColumn])
kColumn += 1
cColumn += 1
kRow += 1
cRow += 1
nKRow = midRow - 1
cRow = 0
#Get rows past
while nKRow >= 0 and row - nKRow >= 0:
nKColumn = midColumn - 1
cColumn = 0
while nKColumn >= 0 and column - nKColumn >= 0:
# Account for row 0
if row == 1 and cColumn == 0:
pSum += float(A1[0][column - cColumn] * A2[nKRow][nKColumn])
else:
pSum += float(A1[row - cRow][column - cColumn] * A2[nKRow][nKColumn])
nKColumn -= 1
cColumn += 1
nKRow -= 1
cRow += 1
value = float(pSum / average)
A3[row][column] = value
这在大多数情况下有效,但在边缘情况下不正确。问题是当row=0或column=0时,我在设置值时遇到问题。在
是否有更好的方法从中心开始在二维阵列中导航每个方向?
{是的,看起来像是}?在
在您的示例中,midRow、midColumn和average在哪里定义?在
为什么要从A2的中心开始?求和和和和乘法都是交换运算,所以顺序不重要。从A2的左上角开始会简单得多。比如(我还没有测试过):
相关问题 更多 >
编程相关推荐