Опираясь на ответ Свена Марнаха, если вы хотите выполнить вычисления для mat[:,0:8]
, затем для mat[:,1:9]
и т. Д., Вы сможете выполнить все вычисления "сразу" на трехмерной матрице
In [119]: x = np.lib.stride_tricks.as_strided(mat, shape = (3,2,8), strides = mat.itemsize*np.array([1,mat.shape[-1],1]))
In [120]: x
Out[120]:
array([[[ 0, 1, 2, 3, 4, 5, 6, 7],
[10, 11, 12, 13, 14, 15, 16, 17]],
[[ 1, 2, 3, 4, 5, 6, 7, 8],
[11, 12, 13, 14, 15, 16, 17, 18]],
[[ 2, 3, 4, 5, 6, 7, 8, 9],
[12, 13, 14, 15, 16, 17, 18, 19]]])
Например, чтобы найти внутреннее произведение строк, вы можете вычислить все три с помощью
In [127]: np.sum(x[:,0,:]*x[:,1,:],axis = -1)
Out[127]: array([420, 564, 724])
вместо использования цикла Python:
In [128]: for i in range(3):
.....: print(np.sum(mat[0,i:i+8]*mat[1,i:i+8]))
.....:
.....:
420
564
724