问题:
在给定邻接表E_ij
的情况下,我想计算几次邻接矩阵A_ij
,其中E_ij[t,i] = j
给出了从i
到j
的边,时间为t
。
我可以用下面的代码做到这一点:
import numpy as np
nTimes = 100
nParticles = 10
A_ij = np.full((nTimes, nParticles, nParticles), False)
E_ij = np.random.randint(0, 9, (100, 10))
for t in range(nTimes):
for i in range(nParticles):
A_ij[t, i, E_ij[t,i]] = True
问题:
如何以矢量化的方式来实现它,要么使用花哨的索引,要么使用像np.take_along_axis
这样的numpy函数?
我尝试的是:
我希望这能奏效:
A_ij[:,np.arange(nParticles)[None,:,None], E_ij[:,None,np.arange(nParticles)]] = True
但事实并非如此。
相关项目:Trying to convert adjacency list to adjacency matrix in Python
3条答案
按热度按时间yiytaume1#
我想这可能行得通:
mwecs4sa2#
另一种方法,接近你在最后实际尝试的方法,是这样的:
但公认的答案肯定是解决问题的更好方法,不需要构建指数。
vojdkbi03#
为了防止可能对其他人有帮助,我还找到了一种方法在这个问题上做花哨的索引,但@ Chrysophylax的答案更快更简单(我猜我对索引感到困惑,无法思考它)。我还添加了@Mercury的答案以供比较。
代码:
输出: