在这种情况下,绕过"内存错误"的最佳方法是什么?



我有两个相当大的numpy数组。第一个是(40, 40, 3580)大小的arr1,第二个是(3580, 50)大小的arr2。我想要实现的是

arr_final = np.sum(arr1[..., None]*arr2, axis = 2)

这样arr_final的大小正好是(40, 40, 50).但是,在执行上述操作时,python可能会缓存内部数组操作,因此我不断收到内存错误。有什么方法可以避免内部缓存并得到最终结果吗?我看过numexpr,但我不确定如何才能实现arr1[..., None]*arr2,然后在numexprsumaxis=2。任何帮助或建议将不胜感激。

假设你的意思是np.sum(arr1[..., None]*arr2, axis = 2),用...而不是:,那么这只是dot

arr3 = arr1.dot(arr2)

这应该比显式实现arr1[..., None]*arr2更有效,但我不知道它到底分配了什么中间体。

您还可以使用einsum表示计算。同样,这应该比显式实现arr1[..., None]*arr2更有效,但我不知道它到底分配了什么。

arr3 = numpy.einsum('ijk,kl', arr1, arr2)

相关内容

  • 没有找到相关文章