如何在 numpy 中快速实现这样的操作

2020-07-31 11:51:21 +08:00
 Deepseafish

通过一个 mask 得到数组中的某几位后,再通过 mask 恢复原来的位置,并在其余地方填充 0 。具体实例代码如下。

除了遍历有没有更好方法?

https://gist.github.com/SungYK/4a23c94c9eb6b275d3d2bd90a0b2a5dd

1617 次点击
所在节点    问与答
2 条回复
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)
ytterbium
2020-07-31 13:20:38 +08:00
和 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]

]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX