Python 3.x 索引错误:标量变量的索引无效
我试图使用dataset中检测注释中提到的尺寸创建边界框(我使用polyterrasse注释),出于某种原因,以下代码工作了25帧,但突然出现错误:Python 3.x 索引错误:标量变量的索引无效,python-3.x,list,point-clouds,Python 3.x,List,Point Clouds,我试图使用dataset中检测注释中提到的尺寸创建边界框(我使用polyterrasse注释),出于某种原因,以下代码工作了25帧,但突然出现错误: indexer错误:标量变量的索引无效。我下载了数据,解包,检查了它,结果发现文件polyterrasse026.ezd.bbox只有一行数据: 1.718750 5.066964 -0.327395 0.693458 0.684387 1.325830 0 0 0 0 这就是为什么bbox\u路径[26]是1D数组。这就是你出错的原因 编辑
indexer错误:标量变量的索引无效。
我下载了数据,解包,检查了它,结果发现文件polyterrasse026.ezd.bbox
只有一行数据:
1.718750 5.066964 -0.327395 0.693458 0.684387 1.325830 0 0 0 0
这就是为什么bbox\u路径[26]
是1D数组。这就是你出错的原因
编辑
要验证bbox
是否为2D数组,您可以使用,例如,bbox.ndim==2
bbox.size
显示数组中的元素数,而不是维度数
问题的本质是,如果文件只包含一行数据,则np.loadtxt()
返回1D数组。您可以这样处理此问题:
if bbox.ndim == 1:
bbox = np.array([bbox])
看起来
cbox\u dim
只有一个维度,因此cbox\u dim[j]
是一个单值标量。cropbox是3D的,就像一个边界框。让我困惑的是,这个程序工作了25帧,然后它给出了一个错误。我得到了正确的对象切出帧,没有任何问题。我检查了第26帧,它在数据和格式方面看起来完全一样。但是我遇到了一个索引问题。那么您可能应该检查bbox\u path[25]
,因为在这种情况下bbox=np.loadtxt(…)
为您提供1D数据。文本文件包含nx10数组作为数据。这些数组中的每一行表示边界框的质心和尺寸。这就是为什么我使用np.load text直接将数据作为numpy数组接收的原因。我在全局路径中做了必要的更改。希望这能让事情变得更简单。是的,每个文件的行数有很大的不同。但这就是我在访问数据之前检查数组长度的原因。因此,无论nx10阵列是什么,程序都会进行迭代,直到n,并相应地访问数据。我这里的逻辑错了吗?@kav你检查条件bbox.size==0
,这不能保证bbox
是2D数组。我暗示的检查是范围内的j(len(cbox\u dim))
,如果我没有弄错的话,它应该可以工作一次迭代?@kav,您得到错误是因为cbox\u dim
应该是2D数组,但它是1D数组。当它是2D数组时,迭代行(1D数组),当它是1D数组时,迭代值(0D数组)。因此for循环按预期工作,不检查cbox\u dim
中的维度数。我的答案的编辑部分提供了问题的解决方法。请检查一下,它成功了!谢谢我还有一个问题要问你。当我尝试使用cropbox过滤器清除实例时,我处理了这个数据集的另一个问题,但由于某些原因,我只能在第1帧之后执行此操作。你能告诉我你有没有山姆·艾苏吗?我是否要编辑我的问题并在其中添加下一个问题?我对stackoverflow比较陌生,所以我不确定是应该单独问一个问题还是编辑这个问题。