2次元配列を分割したい


102×102の行列を17×17の行列に分割したいです。  
102行列は行列の番号がふってあるので、  
読み込んだときにDataframeから配列になおしました。  
102行列を読み込むことはできましたが、分割はどのようにしたらいいでしょうか。  
分割はsplitを使えばいいのですか？  
よろしくお願いします。

行列を読み込むところまでのコードは以下のように書いています。

[code]

    dfs=[]
    for filename in filenames:
        #print(filename)
        df=pd.read_csv(filename,index_col=0)
        #print(df)
    
        a_df = df.values
        print(a_df)
        print(a_df.shape)
    
[/code]




numpyのスライシングだけを使って行列を分割してみました。

[code]

    def func1(arr, block_size, block_num):
        size = block_size * block_num
        result = []
        for row in range(0, size, block_size):
            block = []
            for col in range(0, size, block_size):
                block.append(arr[row:row+block_size, col:col+block_size])
            result.append(block)
        return result
    
[/code]

内包表記を使うと

[code]

    def func2(arr, block_size, block_num):
        size = block_size * block_num
        return [[arr[row:row+block_size,col:col+block_size] for col in range(0, size, block_size)]　for row in range(0, size, block_size)]
    
[/code]

Google Colab で処理時間を測ると、func1 が 115µs、func2 が 107µsでした。np.split
を使ったものは、470µsでした。

