Numpy 高级索引失败
Numpy advanced indexing fails
我有一个像这样的 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. ]])
我喜欢通过将 'bottom left' 部分设置为零来操纵它。我不想循环遍历行和列,而是想通过索引来实现:
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
的形状,但左下角全为零?
为此您不需要高级索引。 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. ]])
如果您根本不想担心创建 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. ]])
我有一个像这样的 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. ]])
我喜欢通过将 'bottom left' 部分设置为零来操纵它。我不想循环遍历行和列,而是想通过索引来实现:
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
的形状,但左下角全为零?
为此您不需要高级索引。 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. ]])
如果您根本不想担心创建 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. ]])