两个Python for循环的逻辑差异解析(基于Numpy数组场景)
numpy数组循环遍历的逻辑差异分析
你的circles应该是一个三维numpy数组,形状类似(1, N, 3)——第一维度仅包含1个元素,第二维度对应N个圆的信息,第三维度的3个值分别是x坐标、y坐标、半径。两个循环的核心差异在于遍历的数组维度完全不同:
第一个循环
for coordinates in circles[0,:]
这里circles[0,:]提取了三维数组第一维度的唯一元素,得到一个二维数组(形状(N, 3))。遍历这个二维数组时,每次迭代会取出其中的一行(即单个圆的[x, y, 半径]数组),你可以通过coordinates[2]正确获取每个圆的半径值。第二个循环
for coordinates in circles
直接遍历三维数组circles时,numpy会默认按第一维度进行迭代。由于你的数组第一维度只有1个元素,这个循环只会执行一次,coordinates拿到的是整个(N, 3)的二维数组(而非单个圆的信息)。此时如果尝试通过下标取半径,得到的是二维数组的第三行,而非每个圆的半径,因此结果错误。
你可以通过执行print(circles.shape)查看数组的具体形状,就能更直观地理解这种维度差异带来的遍历结果不同。
内容的提问来源于stack exchange,提问作者Akash Joshi
相关产品推荐
相关产品推荐

