python - 使用 NumPy 数组(或创建元组)的索引性能瓶颈
问题描述
想象一下,我们有以下功能:
def return_slice(self, k):
return (self.A[self.C[k]:self.C[k+1]], self.B[self.C[k]:self.C[k+1]])
它是具有数组 A、B 和 C 的类的一部分,其中包含大量整数(超过 10^5)。虽然调用这个函数几次就足够快了,但我注意到对这个函数的大约 200 万次调用需要很长时间(我最近的几次经验显示大约 12 秒)。我设法在这方面做得更好:
def return_slice(self, k):
pos = slice(self.C[k], self.C[k + 1])
return (self.A[pos], self.B[pos])
这将其降低到约 6 秒。这对我来说仍然有点不可接受......我觉得我应该改变我的数组的整个结构方式,但我把这个问题带给你,因为我可能会错过一些东西为什么这么慢.
请记住,不能假设 k 值的“结构”,只需假设每次执行都是随机的。
我还认为在返回之前创建元组可能是这里的问题,但要消除它需要大量的工作——我更愿意探索其他替代方案。
编辑:A 和 B 的大小相同,但数据类型不同。
解决方案
怎么样?
self.D = np.vstack(self.A, self.B)
def return_slice(self, k):
pos = slice(self.C[k], self.C[k + 1])
return tuple(self.D[:, pos])
推荐阅读
- python - 手动读取 mongodump
- python - 如何从 Mac 的 Spotlight 运行 Python 脚本(而不必打开终端或 Pycharm)?
- reactjs - 我正在尝试从我的反应应用程序向我的服务器发送 POST 请求,但是我不断收到状态 400 Bad Request 错误
- c++ - 如何将 Variadic CRTP 基类设置为派生类的朋友
- asp.net-core - asp.net Core 3.1 Webapp 无法绑定到本地主机
- excel - 检查 EXCEL 中的单元格是否存在不允许的字符
- asp.net-core - .NET Core 2-3 JWT 多受众
- python - 将浮点坐标添加到 numpy 数组
- sql - postgres 在结果行中执行 sql
- python - Python 4 阶差异。Eqn 使用 bvp 求解器