Lowe三角矩阵中的更改值

时间:2019-04-03 14:42:55

标签: python numpy matrix

我创建了以下矩阵:

Q = np.asmatrix(np.tril(-1*np.ones(15), -1)[:, ::-1])

print(Q)
array([[ 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.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,-1., -1.],
       [ 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., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0., -1., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0.,  0.,  0., -1., -1., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0.,  0., -1., -1., -1., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0.,  0., -1., -1., -1., -1., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0.,  0., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0.,  0., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,-1., -1.],
       [ 0., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1., -1.,-1., -1.]])

然后,我对矩阵进行一些计算(与问题无关),以更改当前设置为零的值。

最终,我想用矩阵“ Q”中的用位置100代替那些-1(例如np.asmatrix(np.tril(-100 * np.ones(15), -1)[:, ::-1])不是一种解决方案)。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

我们可以创建一个等效的Q并使用它索引到mask = np.tri(len(Q),k=-1,dtype=bool)[:,::-1] 并分配新值-

status_a = 0b1
status_b = 0b10
status_c = 0b100

statuses_to_pass = status_a | status_c  # 0b101

答案 1 :(得分:0)

获取等于-1的值的索引位置,然后您随时可以访问它并分配新值

import numpy as np
Q = np.asmatrix(np.tril(-1*np.ones(5), -1)[:, ::-1])

indexes = np.where(Q == -1)

Q[indexes] = -100
print(Q)


[[   0.    0.    0.    0.    0.]
 [   0.    0.    0.    0. -100.]
 [   0.    0.    0. -100. -100.]
 [   0.    0. -100. -100. -100.]
 [   0. -100. -100. -100. -100.]]

或使用蒙版

Mask = Q==-1
print(Mask)

Q[Mask] = -100
print(Q)

[[False False False False False]
 [False False False False  True]
 [False False False  True  True]
 [False False  True  True  True]
 [False  True  True  True  True]]
[[   0.    0.    0.    0.    0.]
 [   0.    0.    0.    0. -100.]
 [   0.    0.    0. -100. -100.]
 [   0.    0. -100. -100. -100.]
 [   0. -100. -100. -100. -100.]]