我有两个 numpy 相当大的数组。首先是 arr1 大小 (40, 40, 3580) 其次是 arr2 大小 (3580, 50) .我想要实现的是
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=2 在里面 numexpr 。如有任何帮助或建议,将不胜感激。
arr_final
(40, 40, 50)
numexpr
arr1[..., None]*arr2
sum
axis=2
假设你的意思是 np.sum(arr1[..., None]*arr2, axis = 2) ,带有 ... 而不是 : ,那么 dot :
np.sum(arr1[..., None]*arr2, axis = 2)
...
:
dot
arr3 = arr1.dot(arr2)
这应该比显式具体化更有效 arr1[..., None]*arr2 ,但我不知道它到底分配了什么中间产物。
您还可以使用 einsum 。同样,这应该比显式具体化更有效 arr1[…,无]*arr2 ,但我不知道它到底分配了什么。
einsum
arr1[…,无]*arr2
arr3 = numpy.einsum('ijk,kl', arr1, arr2)