1

我有一个点的选择(即邻域)

每个点都有一个 XYZC 值。其中 C 为 1 或 0。

如果任何点的 C 值为 1,我想将我的中心点的 c 值分配为 0。

如果所有点的 C 值为 0,我想将我的中心点的 c 值分配为 1。

    n=np.zeros((1,1))

    for b in range(0,6):
        bb = coordlist[b][4] 
        if bb==1:
            break
        n+=bb

    if n< 1:
        in_cloud[point][4] =1    

这是最快和最好的方法吗?我将在附近获得 20/30 分。

4

2 回答 2

2

您可以定义coordlist为二维数组:

coordlist = np.array(coordlist)

并立即进行比较:

if np.any(coordlist[:,4]==1):
    in_cloud[point][4] = 0
else:
    in_cloud[point][4] = 1

但是您还应该查看该in_cloud列表,您似乎可以通过将所有内容从listto更改np.ndarray并避免 Python for 循环(如本示例中所示)来提高代码的整体速度。

于 2013-09-19T15:36:55.260 回答
1
incloud[point][3] = not any(xyzc[3] for xyzc in coordlist)

或者如果你可以先做

coordlist = numpy.array(coordlist)

做起来会更快

incloud[point][3] = not coordlist[:,3].any()

我知道您使用过things_to_index[4],但第 4 项位于索引 3 处,所以这似乎是您的错误(“C”是“XYZC”中的第四项)。

于 2013-09-19T16:03:55.640 回答