由XYZ坐标集计算几何中心

2024-04-29 00:43:13 发布

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

我有一组由31个原子组成的分子的三维坐标,存储在嵌套数组列表中:

[[121.133, 146.696, 139.126], [121.207, 145.489, 138.437], [122.058, 145.337, 137.335], [121.972, 143.689, 136.593], [123.209, 143.616, 135.31], [124.536, 143.881, 135.697], [124.87, 145.234, 135.928], [126.179, 145.569, 136.301], [127.156, 144.591, 136.455], [126.838, 143.258, 136.229], [123.824, 146.34, 135.736], [125.543, 142.913, 135.853], [123.008, 142.449, 134.454], [120.662, 143.598, 135.938], [122.362, 142.722, 137.625], [122.857, 146.427, 136.913], [122.764, 147.633, 137.625], [121.914, 147.77, 138.718], [123.101, 146.373, 134.374], [122.534, 147.208, 134.333], [122.482, 145.576, 134.33], [124.016, 146.346, 133.138], [125.066, 147.46, 133.272], [124.449, 148.847, 133.177], [123.972, 149.313, 131.947], [123.409, 150.582, 131.856], [123.322, 151.385, 132.993], [123.796, 150.925, 134.221], [124.36, 149.655, 134.314], [122.769, 152.634, 132.905], [123.339, 153.323, 133.255]]

每个子列表由每个原子的XYZ坐标组成,每个原子对应31个子列表。我需要用这组坐标作为输入来计算这个分子的几何中心,从而得到一个X,Y,Z的点

可以使用numpy.mean或其他标准python库来实现吗


Tags: numpy列表标准数组mean中心分子原子
2条回答

当然。只用

import numpy as np

def center(nested_array_list):
    a = np.array(nested_array_list)
    mean = np.mean(a, axis=0)
    return mean[0], mean[1], mean[2]  # x, y, z

其他标准python库

您可以使用内置的statistics模块来实现这一点。考虑下面的玩具例子:

import statistics
points = [[10,20,30],[90,40,60]]
center = [statistics.mean(i) for i in zip(*points)]
print(center)  # [50, 30, 45]

我使用zip结合解包(*)来转置点,结果是列表中有三个元组,它们是保持点X-坐标、点Y-坐标和点Z-坐标。然后我通过所谓的列表理解对每个元组使用statistics.mean函数

相关问题 更多 >