python - 如何使用 numpy 将矩阵分成 4 个 block ?

标签 python matrix numpy split strassen

我正在使用 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/

相关文章:

python - 简单的 Python IF 语句似乎不起作用

python - 内存中列表的大小

java - 如何在java中检查矩阵位置值?

java - 停止 glUseProgram()

python - 计算快速傅里叶变换中的频率

python - Pandas 两个分组的 DataFrame 列的简单关联

python - 如何在 Python 中使用行和列迭代来填充矩阵

python - Numpy:用 numpy 数组替换 numpy 数组中的零

python - 优化遍历每个元素的 NumPy 矩阵总和

python 获取长度为 X 的列表,其中所有值的总和为 Y