我正在尝试从点云中删除彼此太近的点。我的输入是一个mx3矩阵,其中列代表xyz坐标。代码如下:
<html>
<head>
<hta:application
APPLICATIONNAME = "Program ALERT"/>
<script type='text/vbscript'>
Sub Window_onload()
Dim cmd, srFSO, srFile, srCount, srMsg
cmd="bcp ""select cast(count(*) as varchar(2)) from database..table where foo = 'bar'"" queryout \\path\file.txt -c -T -S serveraddress"
Set srFSO = CreateObject("Scripting.Filesystemobject")
Set srFile = srFSO.OpenTextFile("\\path\file.txt")
srCount = srFile.Readall
srFile.Close
If srCount = 0 then
Me.SetTimeout "Me.Close()",8000
else
Me.SetTimeout "Me.Close()",0
End If
If srCount = 1 then
srMsg = "There is " + srCount + " open SR."
else
srMsg = "There are " + srCount + " open SRs."
End If
document.getelementbyid("SRs").innerHTML = srMsg
End Sub
Sub ExitProgram
window.close()
End Sub
</script>
<script type="text/javascript">
if (srCount != 0) {
seconds = 8;
}
else {
seconds = 0;
}
function decreaseTime(){
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
seconds--;
if(seconds<0){
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
return true;
}
setTimeout('decreaseTime()',1000);
}
window.onload = function() {
document.getElementById("exitbutton").value="Exit (" + seconds + ")";
setTimeout('decreaseTime()',1000);
}
</script>
</head>
<body scroll="no">
<h1>Title</h1>
<h2><div id="SRs"></div></h2>
<p align="right"><input id=exitbutton type="button" value="Exit" onClick="ExitProgram" class="myButton"></p>
</body>
</html>
我遇到的问题是unique_indices包含的值大于点的长度(我的测试数据为2265和1000)。我做错了什么,或者这是NumPy中的错误?
编辑:我应该注意,对于非常小的输入(尝试27点),unique()似乎可以正常工作。
答案 0 :(得分:2)
所以points
是一个二维数组,(m,3)
形状,对吧?
point_tuples
是一个元组列表,即rounded_points
行现在是3个浮点数的元组。
np.unique
将把它变成一个数组来做它的事情
np.array(point_tuples)
是一个(m,3)
数组(同样是2d,如points
)。元组什么也没做。
unique
将对此数组的raveled形式起作用,因此unique_indices
的值可以介于0和3 * m之间。因此你的错误。
我看到2个问题 - 如果您希望unique
找到唯一的“行”,则需要制作结构化数组
np.array(point_tuples, 'f,f,f')
将unique
应用于浮点数也很棘手。几乎不可能找到相同的2个浮子。舍入可以减少这个问题,但不会消除它。
所以最好以这样的方式使用round:rounded_points
是一个整数数组。这些值无需缩小以匹配points
。
如果需要,我可以添加一个示例,但首先尝试这些建议。我对你的数据进行了很多猜测,我希望在进一步研究之前得到一些反馈。
答案 1 :(得分:-1)
由于之前的程序有效,我建议您有重叠问题:NumPy在右侧访问 points ,同时在左侧更改它。使用其他变量名称
orig_points = points[unique_indices]
return orig_points
或直接直接退回
return points[unique_indices]