创建系数矩阵

时间:2018-01-15 18:56:47

标签: python list matrix

我想将List t4创建为系数矩阵。我的代码如下。它很长,不能扩展到更多的项目。你能帮我一个有效的代码吗?我很欣赏。

{{1}}
{{1}}

3 个答案:

答案 0 :(得分:1)

老实说:你的问题需要背景!目前还不清楚您需要什么,如何参数化以及您需要它。模式,名称​​ coeff矩阵和稀疏性在某种程度上指向了数值方法的进一步使用。这些可能不会基于python的列表,而是使用numpy / scipy(或其他基于C / Fortran的数据结构)。

所以只是为了给你一个想法,numpy / scipy 的用法如何看起来像(不一定是性能最好的方法;但是非常易读且容易移植到稀疏矩阵):

代码:

import numpy as np
from scipy.linalg import block_diag

N = 6
M = 2

pattern = np.array([[-1, -1, -1]])
upper = block_diag(*[pattern for i in range(N)])
lower = np.zeros((M, upper.shape[1]))
mat = np.vstack((upper, lower))
print(mat)

输出:

[[-1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0. -1. -1. -1.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1. -1.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1. -1.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0. -1. -1. -1.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]]

答案 1 :(得分:1)

我没有看到输出的全零行数如何与您的三个参数一起缩放。但这里是如何产生矩阵的上半部分:

SCE = 3
ITEMS = 3
TYPES = 2
WIDTH = SCE * ITEMS * TYPES

r = np.array([-1] * ITEMS + [0] * (WIDTH - ITEMS))
t4_upper = np.stack([np.roll(r, i) for i in range(0, WIDTH, ITEMS)])
print(t4_upper)

#[[-1 -1 -1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0]
# [ 0  0  0 -1 -1 -1  0  0  0  0  0  0  0  0  0  0  0  0]
# [ 0  0  0  0  0  0 -1 -1 -1  0  0  0  0  0  0  0  0  0]
# [ 0  0  0  0  0  0  0  0  0 -1 -1 -1  0  0  0  0  0  0]
# [ 0  0  0  0  0  0  0  0  0  0  0  0 -1 -1 -1  0  0  0]
# [ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 -1 -1 -1]]

答案 2 :(得分:0)

也许这就是你想要的东西?

import numpy as np

mat = np.zeros((4,4))
for i in range(4):
    mat[i,i] = -1
print(mat)