我有一个40 * 2000的矩阵,它的维数为1500.我用numpy.outer来计算 向量的外积与矩阵的每列如下:
np.outer(vector, matrix)
它显示了内存错误,因此我将矩阵分割为矩阵[:,:10]并分别计算。它导致矩阵 M
为1500 *(40 * 10)。我需要对这里的每个矩阵求和,这是前40列和另一个下一个40列等等......如果我使用循环,它将会很慢。
M[:,:40]+ M[:,40:80] + .....
有人可以帮我有效地进行这项操作吗?
答案 0 :(得分:0)
您需要通过轴sum
进行一些重塑:
import numpy
M = numpy.arange(100).reshape(5, 20)
M[:, :4]
#>>> array([[ 0, 1, 2, 3],
#>>> [20, 21, 22, 23],
#>>> [40, 41, 42, 43],
#>>> [60, 61, 62, 63],
#>>> [80, 81, 82, 83]])
M[:, 4:8]
#>>> array([[ 4, 5, 6, 7],
#>>> [24, 25, 26, 27],
#>>> [44, 45, 46, 47],
#>>> [64, 65, 66, 67],
#>>> [84, 85, 86, 87]])
...
M[:, 16:20]
#>>> array([[16, 17, 18, 19],
#>>> [36, 37, 38, 39],
#>>> [56, 57, 58, 59],
#>>> [76, 77, 78, 79],
#>>> [96, 97, 98, 99]])
M.reshape(M.shape[0], -1, 4).sum(axis=1)
#>>> array([[ 40, 45, 50, 55],
#>>> [140, 145, 150, 155],
#>>> [240, 245, 250, 255],
#>>> [340, 345, 350, 355],
#>>> [440, 445, 450, 455]])