【发布时间】:2016-02-21 15:00:48
【问题描述】:
我正在为以下问题寻求一种优雅(且快速)的解决方案,简化更重的实际情况。答案可能在 numpy 以外的其他地方,我搜索了又搜索了......
所以,假设,我有:
a = np.array([[2,7],
[3,6],
[2,8]])
让我们拿一个假数据集:
b = np.random.random((3,10))
数组 a 中的行表示 b 的每一行中感兴趣的子集的较低和较高索引:“从 b 的第一行,我对子集 [2:7] 感兴趣,从第二行我” m 对子集 [3:6] 感兴趣,从第三行和最后一行开始对子集 [2:8] 感兴趣。”
我现在的想法是创建一种掩码数组 c
c = np.array([0,0,1,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,0,0,0],
[0,0,1,1,1,1,1,1,1,0]])
然后我继续工作
d = b*c
而我不感兴趣的元素现在是 0。
- 如何使用 a 中的索引生成 c?
- 您有更好的好主意吗?
正确的掩码数组,np.ix_,扭曲的 np.einsum,我找不到任何用于此目的的东西。当然,重点是避免循环,在我的脚本可见部分的列表中。但最终它甚至可以避免吗?
非常感谢!
【问题讨论】:
标签: python arrays performance numpy vectorization