首页 > 解决方案 > 搜索每个子数组中的最小值的函数

问题描述

我正在尝试找出提取最小值的方法。主矩阵(8x8)的每个子数组(4x4)的值。请参考代码中的粗体部分,看看我在哪里弄错了:(

D = [0,2,3,6,7,5,7,7,2,0,2,5,8,6,8,6,3,2,0,3,10,8,6,4,6,5,3,0,8,6,4,2,7,8,10,8,0,2,4,6,5,6,8,6,2,0,2,4,7,8,6,4,4,2,0,2,7,6,4,2,6,4,2,0]

D=np.array(D).reshape(8,8)
n=np.shape(D)[0]

def getmin_submatrix(k,n):
if k>n:
    pass

else:
    #por cada fila en el rango(8-k+1)

    for row in range(n-k+1):
        #por cada columna en el rango(8-k+1)

        for col in range(n-k+1):
            **sub=np.array(n-k+1,n-k+1)**
            #por cada fila en la submatriz (4,4)
            for p in range(row,k+row):
                #por cada columna en la submatriz (4,4)
                for q in range(col,k+col):
                    **mini=sub.min()**
            print(mini,end='')
        
        print()

getmin_submatrix(4,n)

标签: pythonloopsmatrix

解决方案


这将遍历矩阵,您可以定义子矩阵大小和步幅,并为您打印每个子矩阵的最小值。

import numpy as np

D = [0,2,3,6,7,5,7,7,2,0,2,5,8,6,8,6,3,2,0,3,10,8,6,4,6,5,3,0,8,6,4,2,7,8,10,8,0,2,4,6,5,6,8,6,2,0,2,4,7,8,6,4,4,2,0,2,7,6,4,2,6,4,2,0]

D=np.array(D).reshape(8,8)
n=np.shape(D)[0]

def find_min(M, k, stride):
    for row in range(0, M.shape[0]-k+1, stride):
        for column in range(0, M.shape[1]-k+1, stride):
            print(M[row:row+k, column:column+k].min())

find_min(D, 4, 1)

推荐阅读