一种用 0 屏蔽 2D numpy 数组中特定索引后所有值的 pythonic 方法
A pythonic way to mask all values after specific index in a 2D numpy array with 0
我有一个二维数组和一个一维索引数组,如下所示:
a = np.random.rand(2,5)
a
>>> a
array([[0.70095892, 0.01068342, 0.69875872, 0.95125273, 0.18589609],
[0.02990893, 0.78341353, 0.12445391, 0.71709479, 0.24082166]])
>>> ind
array([3, 2])
我希望第 1 行中(包括)索引 3 之后的所有值变为 0,并且第 2 行中索引 2 之后的所有值变为 0。因此最终输出为:
array([[0.70095892, 0.01068342, 0.69875872, 0, 0],
[0.02990893, 0.78341353, 0, 0, 0]])
你能帮我解决这个问题吗?
您可以通过 boolean indexing
:
import numpy as np
a = np.random.rand(2, 5)
ind = np.array([3, 2])
# create a boolean indexing matrix
bool_ind = np.arange(a.shape[1]) >= ind[:, None]
print(bool_ind)
# [[False False False True True]
# [False False True True True]]
# modify values in a using the boolean matrix
a[bool_ind] = 0
print(a)
# [[0.78594869 0.11185728 0.06070476 0. 0. ]
# [0.48258651 0.3223349 0. 0. 0. ]]
我有一个二维数组和一个一维索引数组,如下所示:
a = np.random.rand(2,5)
a
>>> a
array([[0.70095892, 0.01068342, 0.69875872, 0.95125273, 0.18589609],
[0.02990893, 0.78341353, 0.12445391, 0.71709479, 0.24082166]])
>>> ind
array([3, 2])
我希望第 1 行中(包括)索引 3 之后的所有值变为 0,并且第 2 行中索引 2 之后的所有值变为 0。因此最终输出为:
array([[0.70095892, 0.01068342, 0.69875872, 0, 0],
[0.02990893, 0.78341353, 0, 0, 0]])
你能帮我解决这个问题吗?
您可以通过 boolean indexing
:
import numpy as np
a = np.random.rand(2, 5)
ind = np.array([3, 2])
# create a boolean indexing matrix
bool_ind = np.arange(a.shape[1]) >= ind[:, None]
print(bool_ind)
# [[False False False True True]
# [False False True True True]]
# modify values in a using the boolean matrix
a[bool_ind] = 0
print(a)
# [[0.78594869 0.11185728 0.06070476 0. 0. ]
# [0.48258651 0.3223349 0. 0. 0. ]]