Python-Delaunay三角剖分

2024-09-30 22:28:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组,用不同的向量表示点。我所要做的是从每一个地方得到所有的邻居。那些点在'努比·恩达雷'并且拥有类型'数字浮点数64'. 我想用Delaunay三角剖分,但我的问题是数字浮点数64'而不是整数。我已经发现是这样的:

from scipy.spatial import Delaunay
import numpy as np

points = np.array([[-0.30352158,  0.73558974,  0.60562561],
      [ 0.46504451, -0.4754239,   0.74679697],
      [-0.52149363,  0.11833734, -0.84500927],
      [ 0.11225645,  0.80278751, -0.58560285],
      [-0.72246172,  0.57197704,  0.38844732],
      [ 0.89957812, -0.07875899, -0.42960008],
      [-0.4316689,  -0.20747224,  0.87784807],
      [-0.19440343,  0.55628405, -0.80793277]])

tri = Delaunay(points)

neighbor_cell = []

for i in range(len(points)):
    neighbor = tri.vertex_neighbor_vertices[1][
           tri.vertex_neighbor_vertices[0][i]:tri.vertex_neighbor_vertices[0][i + 1]]  #from stack overflow
    neighbor_cell.append(points[neighbor])

我不明白的是,对于上面的列表(points和dir_vec),它是有效的,但当我在实际代码中使用它时,它就不起作用了。在我的实际代码中,我从一个3D图片中提取点,然后把这些点放到一个列表中。列表与“点”列表相同,只是有更多条目。因此,在将前8个条目(上面显示的代码)放入主代码之前,我尝试获取它们的邻居。 当我在我的代码上尝试此操作时,会出现以下错误:

^{pr2}$

我不明白为什么上面的代码有效,但在我的实际代码中却不行。 我的实际代码:

import _pickle as cPickle
from Cell import *
from scipy.spatial import Delaunay

def load(pick):

    with open(pick, 'rb') as input:
        cells = cPickle.load(input, encoding='latin1')
        coms = cPickle.load(input, encoding='latin1')
        point_tree = cPickle.load(input, encoding='bytes')
        print("cPickled loaded")
        return cells, coms, point_tree 

cells, coms, point_tree = load("...")

def convertCells():
# Converts Cells from Cell.Cell to np.array

    cells2 = []
    for i in range(len(cells)):
        cells2.append(cells[i].getMainDir())

    return cells2

def neighborPoints(cells2):

    tri = Delaunay(cells2)

    neighbor_cells = [] # local vector
    help_func = []
    neighbor_cell_dir = []  # directional vector

    for i in range(len(cells2)):
        neighbor = tri.vertex_neighbor_vertices[1][
               tri.vertex_neighbor_vertices[0][i]:tri.vertex_neighbor_vertices[0][i+1]]
        neighbor_cells.append(cells2[neighbor])
        help_func.append(neighbor)

    for i in help_func:
        neighbor_cell_dir.append(coms[i])

    return neighbor_cells, neighbor_cell_dir

cells2的前8个条目与Points中的条目相同。如果我打印单元格类型2,然后打印前8个条目,则会显示:

print(type(cell2))
for i in range(8):
    print(cells2[i])

我得到这个输出:

<class 'numpy.ndarray'> 
[[-0.30352158 0.73558974 0.60562561] 
[ 0.46504451 -0.4754239 0.74679697] 
[-0.52149363 0.11833734 -0.84500927] 
[ 0.11225645 0.80278751 -0.58560285] 
[-0.72246172 0.57197704 0.38844732] 
[ 0.89957812 -0.07875899 -0.42960008] 
[-0.4316689 -0.20747224 0.87784807] 
[-0.19440343 0.55628405 -0.80793277]]

我想要一个新列表中的所有相邻点,这样我可以进一步分析它们。有人知道我做错了什么吗?在


Tags: 代码infromimportforcelltridelaunay
1条回答
网友
1楼 · 发布于 2024-09-30 22:28:41

正如您在评论中所说,cells2是一个列表,而不是numpy数组。索引数组不适用于列表,您需要一个numpy数组。在

也许这是可行的:

def convertCells(cells):
    cells2 = np.array(len(cells),3)
    for i in range(len(cells)):
        cells2[i,:] = cells[i].getMainDir()
    return cells2

或者尝试一下:

^{pr2}$

请注意,您发布的异常不能由列表引发。所以我假设你的帖子代表了几个不同问题的语言。在

相关问题 更多 >