假设我有以下数据帧:
idx = ['H',"A","B","C","D"]
idxp = idx[1:] + [idx[0]]
idxm = [idx[-1]] + idx[:-1]
idx, idxp, idxm
j = np.arange(25).reshape(5,5)
J = pd.DataFrame(j, index=idx, columns=idx)
np.fill_diagonal(J.values, 0)
J
作为输出,我希望得到如下数组:
换言之,这将为我们提供以下矩阵:
m_exp = np.array([[0,1,8,21,40],
[0,0,7,20,39],
[0,0,0,13,32],
[0,0,0,0,19],
[0,0,0,0,0],
])
到目前为止,我找到的计算此矩阵的最佳方法是使用以下代码:
travelup = np.array([np.pad(np.cumsum(J.values.diagonal(1)[n:]), (n+1,0), 'constant') for n in range(J.values.shape[0])])
然而,这涉及到一个理解列表,在实践中,我的矩阵要大得多,这段代码被称为数千次。你知道吗
是否有任何方法可以通过使用映射来转换流程,从而使其更快地避免循环?你知道吗
列出了几种方法。你知道吗
一、基本方法
p
和n
将在下面列出的备选方案中重新使用。你知道吗A.备选方案1
或者使用
broadcasted-multiplication
获得最终输出-B.备选方案2
或者用
outer-subtraction
在cumsum上-C.备选方案3
或者用
np.tri
替换np.triu
c
将在下面列出的备选方案中重新使用。你知道吗二。与
numexpr
对于大型阵列,利用多核和
numexpr
。因此,备选方案是——A.备选方案1
B.备选方案2
相关问题 更多 >
编程相关推荐