algorithm - 来自 3D 点集合的边界框

标签 algorithm python-2.7

我有一个点集合 - 位于网格上。每个点由大小为 3 的一维整数数组指定。边界框由此立方体/长方体的两个对角相对角的坐标指定。我在 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 如果您觉得问题没有得到充分充实,请发表评论。

最佳答案

您的 itminitmax 变量指向同一个列表,因此当您修改其中一个时,另一个也会被修改。

在初始化期间,制作初始列表的浅拷贝,以便每个变量都有自己的单独副本。

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/

相关文章:

algorithm - 找到三个索引 x、y、z,使得 M[x] + M[y] = N[z]

python - 当我有大量数组时检查重复数组

python - OpenCV3 : Error when import cv2 in python OSX el capitan

performance - 排序算法的内存速度权衡

algorithm - 如何使用经过 10 个参数训练的人工神经网络对具有 3 个参数的实例进行分类?

javascript - 在元素数组中查找重复的元素系列

algorithm - B+树的构建

python - Pygame:改变游戏分辨率

python - 基于匹配的 Python 中的第一列合并数据

python - dict.viewkeys() 返回的数据类型是什么? [ python 2.7 ]