Python:计算从一个坐标到一个具有坐标的数组的欧氏距离

Python:计算从一个坐标到一个具有坐标的数组的欧氏距离,python,arrays,numpy,Python,Arrays,Numpy,因为我之前的问题很不清楚,我编辑了它: 我有以下问题: 我想为一个半径为:r+fcr\u的空心球体构造一个图案。空心球体中的空腔半径应为r。有了这个图案,我可以在许多不同的球体中心使用它,得到许多空心球体。现在我正在寻找最快的解决方案。我的做法是: centoEdge = radius+fcr_size #Bounding box coordinates from center to edge xyz_pattern=[] #Create the Bounding Bo

因为我之前的问题很不清楚,我编辑了它:

我有以下问题:

我想为一个半径为:r+fcr\u的空心球体构造一个图案。空心球体中的空腔半径应为r。有了这个图案,我可以在许多不同的球体中心使用它,得到许多空心球体。现在我正在寻找最快的解决方案。我的做法是:

    centoEdge = radius+fcr_size #Bounding box coordinates from center to edge
    xyz_pattern=[]

    #Create the Bounding Box only in positive x,y,z direction, because they are later mirrowed                                  

    x1 = range(0,int(centoEdge)+1)
    y1 = range(0,int(centoEdge)+1)
    z1 = range(0,int(centoEdge)+1)

    #Check if coordinates are the hallow sphere and add them to xyz_pattern list
    for coords in itertools.product(x1,y1,z1):
        if radius < distance.euclidean([0,0,0],coords) <= (radius+fcr_size):
            xyz_pattern.append(coords)

    #mirrow the pattern arround center        
    out = []
    for point in xyz_pattern:
        for factors in itertools.product([1, -1], repeat=3): # (1, 1, 1), (1, 1, -1), (1, -1, 1), ..., (-1, -1, -1)
            out.append(tuple(point[i]*factors[i] for i in range(3)))


    xyz_pattern=list(set(out))
centoEdge=radius+fcr#u size#从中心到边缘的边界框坐标
xyz_模式=[]
#仅在正的x、y、z方向创建边界框,因为它们稍后会混成一行
x1=范围(0,整数(中心边缘)+1)
y1=范围(0,整数(中心边缘)+1)
z1=范围(0,整数(中心边缘)+1)
#检查坐标是否为空心球体,并将其添加到xyz_图案列表中
对于itertools.产品(x1、y1、z1)中的坐标:

如果radius
import math
from functools import partial
import itertools
import numpy as np


def distance(p1, p2):
    return math.sqrt(sum(math.pow(float(x1) - float(x2), 2) for x1, x2 in zip(p1, p2)))


def inside_radius(radius, p):
    return distance(p, (0, 0, 0)) < float(radius)


def inside_squre(centoEdge, p):
    return all(math.fabs(x) <= centoEdge for x in p)


radius = 5
fcr_siz = 5
centoEdge = radius + fcr_siz
x1 = range(0, int(centoEdge) + 1)
y1 = range(0, int(centoEdge) + 1)
z1 = range(0, int(centoEdge) + 1)
coords = np.array(list(itertools.product(x1, y1, z1)))


inside_squre_with_cento = partial(inside_squre, centoEdge)
inside_radius_with_radius = partial(inside_radius, radius)

result = filter(lambda p: not inside_radius_with_radius(p), filter(inside_squre_with_cento, coords))

print(result)
导入数学
从functools导入部分
进口itertools
将numpy作为np导入
def距离(p1、p2):
返回math.sqrt(sum(math.pow(float(x1)-float(x2),2)表示x1,zip中的x2(p1,p2)))
def内半径(半径,p):
返回距离(p,(0,0,0))<浮动(半径)
def内表面(中央边缘,p):

返回all(math.fabs(x)那么一个有球形空腔的立方体?@Ev.Kounis:一个有球形空腔的球体在一个边界框中,但边界框也是球形的?我觉得这个框听起来总是矩形的,这就是为什么我问这个框“坐标”通过itertools在这里创建的是矩形的。如果有更好的可能性通过球体空腔获得球体坐标,那就更好了。但我只想到用itertools创建一个边界框,并通过我的conditions@Varlor我不太清楚你想干什么你想干什么形状是什么?一个空心球体?什么是“在一个包围盒中有一个球形空腔的球体”应该是什么意思?