【发布时间】:2016-09-07 05:40:23
【问题描述】:
我有一个未指定形状的大型 numpy 数组 k,我想构造一个形状相同的数组 d,当 k 中的相应条目介于两个常量 lo 和 @987654325 之间时,它是 1.0 @,否则为 0.0。 (因为更大的代码在做什么,我确实不想要一个布尔值数组。)
这样做的明显方法是
d = np.ones_like(k)
d[np.less(k, lo)] = 0
d[np.greater(k, hi)] = 0
但是,np.less 和 np.greater 调用涉及创建大型临时布尔数组,我认为这是一个很大的开销。有没有一种方法可以在不涉及创建任何大型临时对象的同时保持完全矢量化的情况下执行此操作?
【问题讨论】:
-
如果大型临时数组是一个足够大的问题,您需要摆脱它们,那么大多数常见的 NumPy 技术都会遇到同样的问题。 NumPy 非常喜欢构建巨大的临时数组。
-
我认为在使用普通 NumPy 时没有办法避免此操作的任何临时数组。您可能需要查看 C(编写自定义 ufunc)、Cython 或 Numba。
标签: python performance python-3.x numpy