我有一个 2D Numpy 数组,代表我用 Python3.7
制作的基于图 block 的游戏中的关卡 map 。我的数组有 50 行 x 50 列,每个值都是代表 Sprite 类型(各种墙壁部件、地板等)的整数。当我迭代数组并找到一个墙 Sprite (例如)时,我想知道该值的行号和列号,以便我可以直接引用它。
这看起来很简单,但我似乎找不到正确的 Numpy 函数来迭代 2D 数组并返回位置[row, col]
它找到的每一个。然后,我可以使用数组位置计算它在屏幕上的相对位置,然后使用 .colliderect()
测试碰撞。
编辑:为了更清楚起见,我添加了这样一个事实:我需要将数组中的每个整数值与墙壁部件(也是整数)的列表
进行比较,以及它是否在列表中,返回数组位置。
TL;DR 如何迭代 Numpy 2darray 并返回每个匹配项的[row, col]
而不是值?
最佳答案
只需使用np.argwhere
。
示例:
>>> import numpy as np
>>> a = np.zeros((50, 50))
>>> a[3, 4] = 1
>>> a[4, 5] = 1
>>> for i, j in np.argwhere(a == 1): print(i, j)
...
(3, 4)
(4, 5)
(上面的示例是使用 python 2 运行的,因此显示了输出中的元组,但在其他方面与 python 3 中完全相同。)
关于python - 迭代时如何获取 2D Numpy 数组中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62985962/