1

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

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

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

4

1 回答 1

3

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

arr3 = arr1.dot(arr2)

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

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

arr3 = numpy.einsum('ijk,kl', arr1, arr2)
于 2018-05-14T20:28:51.277 回答