如何解决使用生成器为数据帧创建屏蔽函数
我有一个由 5 个指标变量组成的冗长数据框。每行总和为 3(即将出现 3 个指示特征)。我想遍历数据框并为所有行随机屏蔽 n 个变量(即 1 或 2 个指标从 1 翻转到 0)。
如果我的输入表结构如下:
index ind01 ind02 ind03 ind04 ind05
0 0 1 0 1 1
1 1 0 1 0 1
2 0 1 1 0 1
3 0 0 1 1 1
4 1 1 1 0 0
5 0 1 0 1 1
如果我的函数作为输入传递 n,那么它将从该行中具有非零值的 3 列中抽取 n 个项目,然后将重新写入数据帧以离开 (3-n ) 非零指标值。
鉴于模式的规律性,这是一个可以利用生成器来优化最小计算次数的问题吗?例如。将列展平为 np 数组。然后用生成器从 3 个数组元素中翻转 n 个来迭代它们。然后最后重塑回原来的样子?
我可以为此编写循环文本。但我对生成器以及如何利用它们来加速代码很感兴趣(并且不熟悉它们是否可以携带有助于此类解决方案的“内存项”)。
解决方法
生成器可以帮助您保持较低的内存使用,方法是不具体化列表,而是一次只生成一个元素。但是,它们对性能没有任何作用,并且基本上像普通的 for 循环一样工作(甚至更慢,因为每个新元素实际上都是一个函数调用)。
如果你想要这种任务的性能:直接使用 numpy。听起来你想要像 np.random.choice
这样的东西,它可以在没有 python 调用开销的情况下以 C 速度取值,也不需要为每个条目创建 python 对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。