首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >创建对称矩阵索引- Python中的值

创建对称矩阵索引- Python中的值
EN

Stack Overflow用户
提问于 2018-09-17 01:12:36
回答 1查看 580关注 0票数 1

我有一个列的列表和一个矩阵的上三角值,我想把它转换成一个对称矩阵。例如,我有

代码语言:javascript
运行
AI代码解释
复制
UpperTriangle = [[[0, 5], [6.0, 4.0]],
                 [[1, 3], [9.0, 6.0]],
                 [[2, 4, 6], [9.0, 6.0, 6.0]],
                 [[3], [4.0]],
                 [[4, 6], [4.0, 4.0]],
                 [[5], [2.6666666666666665]],
                 [[6], [4.0]]]

我想把它转换成

代码语言:javascript
运行
AI代码解释
复制
Symmetric = [[[0, 5], [6.0, 4.0]],
             [[1, 3], [9.0, 6.0]],
             [[2, 4, 6], [9.0, 6.0, 6.0]],
             [[1, 3], [6.0, 4.0]],
             [[2, 4, 6], [6.0, 4.0, 4.0]],
             [[0, 5], [4.0, 2.6666666666666665]],
             [[2, 4, 6], [6.0, 4.0, 4.0]]]

第一个列表涉及矩阵的第一行,列表中的第一个列表给出列索引,第二个列表给出与列索引相关的值。第二个列表与第二行相关,依此类推。在上面的示例中(row=0,column=0)有值6.0,(row=0,column=5)有值4.0,(row=1,column=1)有值9.0,(row=1,column=3)有值6.0。

其中一种方法是创建一个numpy矩阵,然后使用以下方法创建一个对称矩阵。

代码语言:javascript
运行
AI代码解释
复制
W = np.maximum( A, A.transpose() )

但是这是不可行的,因为实际的问题涉及一个包含35万行和列的矩阵,构建一个numpy矩阵A占用了太多的内存,转换它需要花费太多的时间。

在不需要构建numpy矩阵的情况下,将UpperTriangle转换为对称的最快的Python方法是什么(使用Python2.7)?(在合理的内存范围内)。

这个问题是在使用IBM的Cplex Python时出现的,您需要插入一个对称矩阵来设置二次矩阵。

代码语言:javascript
运行
AI代码解释
复制
import cplex
my_prob = cplex.Cplex()
my_prob.objective.set_quadratic(Symmetric)
my_prob.solve()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-17 19:00:24

这里输入的企业社会责任表示非常方便。在考虑每一行时,您当然会了解对称矩阵的。到达每一行时,已经知道其上三角形式中省略的所有列的内容。您甚至可以按它们在该行中出现的顺序了解这些值!

因此,这只是一个简单的编程问题:

代码语言:javascript
运行
AI代码解释
复制
def sym(up):        # alters 'up' in place
  pfx=[([],[]) for _ in up]  # to be added to each row
  for r,((cc,vv),(pc,pv)) in enumerate(zip(up,pfx)):
    for c,v in zip(cc,vv):
      if c>r:       # store off-diagonal for later row
        cr,cv=pfx[c]
        cr.append(r); cv.append(v)
    cc[:0]=pc; vv[:0]=pv     # prepend to preserve order
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52364321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档