我有一个如下的numpy数组:
a = np.array([[0.87, 1.10, 2.01, 0.81 , 0.64, 0. ],
[0.87, 1.10, 2.01, 0.81 , 0.64, 0. ],
[0.87, 1.10, 2.01, 0.81 , 0.64, 0. ],
[0.87, 1.10, 2.01, 0.81 , 0.64, 0. ],
[0.87, 1.10, 2.01, 0.81 , 0.64, 0. ],
[0.87, 1.10, 2.01, 0.81 , 0.64, 0. ]])
我喜欢通过将“底部左侧”部分设置为零来进行操作。我不想遍历行和列,而是希望通过索引来实现:
ix = np.array([[1, 1, 1, 1, 1, 1],
[0, 1, 1, 1, 1, 1],
[0, 0, 1, 1, 1, 1],
[0, 0, 0, 1, 1, 1],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 1]])
但是a[ix]
并没有达到我的期望,因为a[ix].shape
现在是(6,6,6)
,即添加了新的维度。为了保留a
的形状,但在左下角全为零,我该怎么做?
答案 0 :(得分:1)
为此,您不需要高级索引。 Boolean indexing将更适合您所拥有的内容:
a[~ix.astype(bool)] = 0
a
#array([[ 0.87, 1.1 , 2.01, 0.81, 0.64, 0. ],
# [ 0. , 1.1 , 2.01, 0.81, 0.64, 0. ],
# [ 0. , 0. , 2.01, 0.81, 0.64, 0. ],
# [ 0. , 0. , 0. , 0.81, 0.64, 0. ],
# [ 0. , 0. , 0. , 0. , 0.64, 0. ],
# [ 0. , 0. , 0. , 0. , 0. , 0. ]])
答案 1 :(得分:1)
如果您根本不需要担心创建ix
,那么您真正要问的是a
的上三角,即方法numpy.triu
np.triu(a)
array([[0.87, 1.1 , 2.01, 0.81, 0.64, 0. ],
[0. , 1.1 , 2.01, 0.81, 0.64, 0. ],
[0. , 0. , 2.01, 0.81, 0.64, 0. ],
[0. , 0. , 0. , 0.81, 0.64, 0. ],
[0. , 0. , 0. , 0. , 0.64, 0. ],
[0. , 0. , 0. , 0. , 0. , 0. ]])