我正在使用 python 实现 Strassen 的矩阵乘法。在划分步骤中,我们将一个较大的矩阵划分为较小的子矩阵。是否有内置的 numpy 函数来拆分矩阵?
最佳答案
根据 this answer ,您可以使用 swapaxes
:
您可以创建一个辅助方法:
def split(array, nrows, ncols):
"""Split a matrix into sub-matrices."""
r, h = array.shape
return (array.reshape(h//nrows, nrows, -1, ncols)
.swapaxes(1, 2)
.reshape(-1, nrows, ncols))
这是一个使用它的例子
import numpy as np
array = np.array([
[1, 1, 2, 2],
[3, 3, 4, 4],
[5, 5, 6, 6],
[7, 7, 8, 8]])
A, B, C, D = split(array, 2, 2)
# A =
# [[1 1]
# [3 3]]
# B =
# [[2 2]
# [4 4]]
# C =
# [[5 5]
# [7 7]]
# D =
# [[6 6]
# [8 8]]
print('A = \n{}\n\n'
'B = \n{}\n\n'
'C = \n{}\n\n'
'D =\n{}'.format(A, B, C, D))
关于python - 如何使用 numpy 将矩阵分成 4 个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105375/