我创建了以下矩阵:
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])不是一种解决方案)。
我该怎么做?
答案 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.]]