我有一组点 - 躺在网格上。每个点由大小为 3 的 1d 整数数组指定。边界框由此立方体/长方体的两个对角对角的坐标指定。我在 python 中编写了以下代码来执行此操作 -
import random as r
list = [[r.randint(-3,3) for j in range(3)] for i in range(90)]
#initialize itmin and itmax
itmin = list[0]
itmax = list[0]
#propagation
for i in range(len(list)):
for j in range(3):
itmax[j]=max(itmax[j],list[i][j])
itmin[j]=min(itmin[j],list[i][j])
print itmax
print itmin
这个的输出 - 在 python 上运行时 -
[-1, 3, 1]
[-1, 3, 1]
然而,我本来希望它是
[ 3, 3, 3]
[-3,-3,-3]
任何人都可以指出我做错了什么吗?
您也可以在线试用 - http://ideone.com/gNvG6I
如果您觉得问题没有得到适当的充实,请发表评论。
最佳答案
你的 itmin
和 itmax
变量指向同一个列表,所以当你修改一个时,另一个也被修改。
在初始化期间,对初始列表进行浅拷贝,以便每个变量都有自己单独的副本。
itmin = list[0][:]
itmax = list[0][:]
或者,完全跳过循环并使用列表推导式获取最大值和最小值。
import random as r
list = [[r.randint(-3,3) for j in range(3)] for i in range(90)]
itmax = [max(point[i] for point in list) for i in range(3)]
itmin = [min(point[i] for point in list) for i in range(3)]
print itmax
print itmin
结果:
[3, 3, 3]
[-3, -3, -3]
关于algorithm - 来自 3D 点集合的边界框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18743974/