我一直试图弄明白这一点,但我无法做到这一点。
我目前正在使用站点到站点渗透进行殖民模拟。我试图将其扩展到大数~10 ^ 6但是传统的numpy方法用于计算距离我是使用平方的比例尺,因此对于如此大的运行,程序运行超过一天。我真的希望这更快。我已经找到了解决方案,但我找不到任何可以帮助我的东西,因为我有一个用于模拟的自定义类。
所以我想要每个节点到所有其他节点的距离,如果节点在彼此的D_max范围内,则绘制边缘,允许两个节点之间的迁移。
`density = 0.14 #Stellar density per cubic parsec
L = 100
Patches = int(0.056*density*L**3+15)
Distance = 5
nearand = np.genfromtxt('/Users/Skippy/nearand.csv', delimiter = ',',usecols=np.arange(0, 3)).astype('float32') # a csv of 3d cartesian co-ordinates
G = nx.Graph()
xcoord = nearand[:,0]
ycoord = nearand[:,1]
zcoord = nearand[:,2]
class patch:
def __init__(self,status=0,pos=(0,0,0)):
self.status = status
self.pos = pos
def __str__(self):
return(str(self.status))
for i in xrange(Patches):
Stat = 1 if np.random.uniform() < P_init else 0 # a parameter used in the algorithm later
Pos = (xcoord[i], ycoord[i], zcoord[i])
G.add_node(patch(Stat,Pos))
for p1 in G.nodes():
for p2 in G.nodes():
Dist = np.sqrt((p1.pos[2] - p2.pos[2])**2 + (p1.pos[1]-p2.pos[1])**2+(p1.pos[0]-p2.pos[0])**2)
if Dist <= Distance:
G.add_edge(p1,p2)`
在此之后,运行算法,但是在距离计算上保持较大的运行,因此只需要优化距离。有人可以帮我这个吗?它看起来与其他问题类似,但我需要能够像传统的numpy计算计算距离一样绘制这些边缘。
答案 0 :(得分:0)