所以我在我的软件中遇到了一个相当大的瓶颈。我有一组坐标,cords
其中每一行对应于X,Y,Z
坐标。中的每个坐标在 中cords
都有一个定义的区域atom_proj
。atoms
变量对应于变量,cords
并提供了atom_proj
.
我将坐标投影到grid
数组上,然后旋转并重复,直到满足旋转次数。我只投影 X 和 Z 坐标而忽略 Y。
我在下面有我的代码的简化版本。对于较小的坐标集和旋转次数,该代码运行相对较快。但是如果坐标集和旋转列表都很大,则可能需要很长时间。坐标的数量可以从几百到几万不等。我将区域投影到grid
多个或旋转上以生成热图。下面还显示了坐标集的热图示例。
问题:
(i) - 如何减少坐标在矩阵上的投影时间
(ii) - 是否有更 Pythonic 的方式将坐标区域应用于grid
而不是数组拼接?
import numpy as np
cords = np.array([[5,4,5],[5,4,3],[6,4,6]])
atoms = np.array([['C'],['H'],['C']])
atom_proj = {'H':np.array([[0,0,0,0,0],[0,0,1,0,0],[0,1,1,1,0],[0,0,1,0,0],[0,0,0,0,0]]),'C':np.array([[0,0,0,0,0,0,0],[0,0,0,0,0,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,1,1,1,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,0,0]])}
grid = np.zeros((10,10))
for rot in xrange(1,10):
# This for loop would contain a list of list of rotations to apply which are calculated before hand.
# apply rotation
for values in zip(cords, atoms):
atom_shape = np.shape(atom_proj[values[1][0]])
rad = (atom_shape[0]-1)/2
grid[values[0][2]-rad:values[0][2]+rad+1,values[0][0]-rad:values[0][0]+rad+1] += atom_proj[values[1][0]]
print grid
热图: