numpy:布尔索引和内存使用情况

NPE*_*NPE 7 python memory-management numpy large-data

请考虑以下numpy代码:

A[start:end] = B[mask]
Run Code Online (Sandbox Code Playgroud)

这里:

  • A并且B是具有相同列数的2D数组;
  • start并且end是标量;
  • mask 是1D布尔数组;
  • (end - start) == sum(mask).

原则上,上述操作可以使用O(1)临时存储,通过B直接复制元素来进行A.

这是实际发生的事情,还是numpy构建一个临时数组B[mask]?如果是后者,是否有办法通过重写声明来避免这种情况?

til*_*ten 2

使用布尔数组作为索引是一种奇特的索引,因此 numpy 需要制作一个副本。如果遇到内存问题,您可以编写一个 cython 扩展来处理它。