我有一个平面列表中对称矩阵的上三角条目(包括对角线),我想用它们来填充整个矩阵,包括下面的三角形。最快的方法是什么?在
这是我目前的方法。这么简单的手术似乎要做很多工作。在
import numpy as np
def utri2mat(utri,ntotal):
iu1 = np.triu_indices(ntotal)
ret = np.zeros([ntotal,ntotal])
ret[iu1] = utri
ret = ret + ret.transpose() - np.diag(ret.diagonal())
return ret
以下是我对一种更快,也可能更好的从平面值生成对称矩阵的方法的提名:
测试:
^{pr2}$和其他答案一样,它使用
out.T[]
来分配下三角。在沃伦的答案使用
np.triu_indices
,这是where
值。这种类型的索引比布尔掩码慢一些。在但正如我所指出的,Divakar使用的
np.triu
在早期的numpy
版本(例如1.9)中没有返回布尔掩码。这就是促使我深入研究这个问题的原因。在在1.10中,该函数被改写为:
我通过用
where
替换~mask
来获得一点速度。结果是一样的,只是去掉了一个中间步骤。在这个版本与您的版本略有不同:
我换了
^{pr2}$将
utri
直接赋值给ret
的转置:我还删除了参数}必须是什么。在
ntotal
,而是根据utri
的长度计算出{受^{} 的启发,您可以使用^{} 来设置元素,这样可能非常有效。这里有一个实现它的方法-
运行时测试-
^{pr2}$相关问题 更多 >
编程相关推荐