通过一个 mask 得到数组中的某几位后,再通过 mask 恢复原来的位置,并在其余地方填充 0 。具体实例代码如下。
除了遍历有没有更好方法?
https://gist.github.com/SungYK/4a23c94c9eb6b275d3d2bd90a0b2a5dd
1
Xs0ul 2020-07-31 12:17:35 +08:00
lz 的 mask = np.array([1,3,5,7]) 一般不叫 mask,叫 indices 比较合理
mask 应该是 mask = np.zeros_like(arr) mask[indices] = 1 然后 res = np.where(mask, arr, 0) |
2
ytterbium 2020-07-31 13:20:38 +08:00 via Android
和 numpy 关系比较近的 pytorch 里有个 masked_scatter
https://pytorch.org/docs/stable/tensors.html#torch.Tensor.masked_scatter 比如,mask 和 val 都是 np.array 类型 mask = [ [0, 1, 0], [1, 0, 0], [1, 1, 0] ] val = [1, 2, 3, 4] x = torch.Tensor.masked_scatter(torch.from_numpy(mask), torch.from_numpy(val)).data.numpy() 输出 x 为 np.array 类型 x = [ [0, 1, 0], [2, 0, 0], [3, 4, 0] ] |