NumPy unique()返回超出范围的索引

时间:2016-01-18 23:08:50

标签: python numpy matrix indexing point-clouds

我正在尝试从点云中删除彼此太近的点。我的输入是一个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()似乎可以正常工作。

2 个答案:

答案 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]