我有一个数组,用不同的向量表示点。我所要做的是从每一个地方得到所有的邻居。那些点在'努比·恩达雷'并且拥有类型'数字浮点数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]]
我想要一个新列表中的所有相邻点,这样我可以进一步分析它们。有人知道我做错了什么吗?在
正如您在评论中所说,
cells2
是一个列表,而不是numpy数组。索引数组不适用于列表,您需要一个numpy数组。在也许这是可行的:
或者尝试一下:
^{pr2}$请注意,您发布的异常不能由列表引发。所以我假设你的帖子代表了几个不同问题的语言。在
相关问题 更多 >
编程相关推荐