【问题标题】:Split matrix in python into square matrices?将python中的矩阵拆分为方阵?
【发布时间】:2020-07-22 13:44:44
【问题描述】:

有没有一种快速简便的方法可以将MxN 矩阵拆分为大小为AxA(方形矩阵)的矩阵,具体从python 的左上角开始贪婪地开始?我有一个 2d numpy 数组。

例如

1 2 3 4 
6 7 8 9
1 2 3 4
6 7 8 9
0 0 0 0

如果我想拆分成2X2,结果应该是这样的列表:

1 2 
6 7

3 4 
8 9

1 2 
6 7

3 4 
8 9

(注意底部的0 0 0 0 被遗漏了)

有没有一种“干净”的方式来写这个?我可以用蛮力写它,但它一点也不漂亮。

【问题讨论】:

标签: python numpy matrix


【解决方案1】:

您可以通过以下方式在一行中执行此操作(使用 numpy):

test = np.arange(35).reshape(5,7)
M, N = test.shape
A = 2
print(test)
print('\n')

split_test = test[0:M-M%A, 0:N-N%A].reshape(M//A, A, -1, A).swapaxes(1, 2).reshape(-1, A, A)

print(split_test)

以上代码的输出为:

[[ 0  1  2  3  4  5  6]
 [ 7  8  9 10 11 12 13]
 [14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27]
 [28 29 30 31 32 33 34]]


[[[ 0  1]
  [ 7  8]]

 [[ 2  3]
  [ 9 10]]

 [[ 4  5]
  [11 12]]

 [[14 15]
  [21 22]]

 [[16 17]
  [23 24]]

 [[18 19]
  [25 26]]]

【讨论】:

    【解决方案2】:

    如果您可以使用 skimage:

    a = np.r_[np.add.outer((1,6,1,6),range(4)),[[0,0,0,0]]]
    
    from skimage.util import view_as_windows
    
    sz = 2,2
    view_as_windows(a,sz,sz)
    # array([[[[1, 2],
    #          [6, 7]],
    #
    #         [[3, 4],
    #          [8, 9]]],
    #
    #
    #        [[[1, 2],
    #          [6, 7]],
    #
    #         [[3, 4],
    #          [8, 9]]]])
    

    【讨论】:

      猜你喜欢
      • 2020-08-11
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      相关资源
      最近更新 更多