【发布时间】:2021-09-24 04:29:45
【问题描述】:
我正在使用列表推导来索引一个 numpy 数组并对值求和:
df[col]=np.array([A_numpy_array[b].sum() for b in B_numpy_array])
我的A_numpy_array 使用B_numpy_array 的元素b 编制索引(其中包含8-9 百万个元素)。
这部分代码是该过程需要一段时间的地方,我完全耗尽了 RAM 并开始写入磁盘。
据我所知,列表推导是 Python 中最有效的方法之一。此外,以这种方式设置 pandas 列在 pandas 中也很有效。
是否有其他方法可以使用b 中保存的索引值对A_numpy_array 进行切片,这将使我能够以更节省内存的方式获得值的总和?
【问题讨论】:
-
了解
shape的A_numpy_array和B_numpy_array可能会有所帮助。您可以先运行列表推导(甚至只是其中的一部分),然后尝试从中创建数组。仅根据您的描述,很难确切知道内存使用发生在哪里。 -
形状分别类似于 (157561, 1) 和 (8000000,)。每个 b 都是一个整数数组。
-
所以
B_numpy_array是objectdtype,其元素数组的形状各不相同?什么样的形状。A_numpy_array[b]这是什么形状?但是对于sum(),它被简化为一个标量,因此结果数组的形状将与B_numpy_array相同(但可能是float dtype)。df也必须很大。 'col' 是否已经存在,或者您是否要在框架中添加一列?你看,我只是在解决我脑海中的问题。如果您真的为我们这样做,那就太好了。
标签: numpy