我想将List t4创建为系数矩阵。我的代码如下。它很长,不能扩展到更多的项目。你能帮我一个有效的代码吗?我很欣赏。
{{1}}
{{1}}
答案 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)