当前位置:网站首页>Simulation volume leetcode [general] 1314 Matrix area and

Simulation volume leetcode [general] 1314 Matrix area and

2022-07-06 06:18:00 Encounter simulation volume

1314. Matrix regions and

To give you one  m x n  Matrix  mat  And an integer k , Please return a matrix  answer , Each of them  answer[i][j]  Are all elements that meet the following conditions  mat[r][c] And :

i - k <= r <= i + k,
j - k <= c <= j + k And
(r, c)  In the matrix .

Example 1:

Input :mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
Output :[[12,21,16],[27,45,33],[24,39,28]]
Example 2:

Input :mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
Output :[[45,45,45],[45,45,45],[45,45,45]]

Tips :

m == mat.length
n == mat[i].length
1 <= m, n, k <= 100
1 <= mat[i][j] <= 100

source : Power button (LeetCode)
link :https://leetcode-cn.com/problems/matrix-block-sum
Copyright belongs to the network . For commercial reprint, please contact the official authority , Non-commercial reprint please indicate the source .

Code :

import numpy as np

from leetcode_python.utils import *
from scipy import signal

class Solution:
    def __init__(self):
        pass

    def matrixBlockSum(self, mat: List[List[int]], k: int) -> List[List[int]]:
        data = np.array(mat)
        h,w = data.shape
        res = [[int(np.sum(data[max(0,i-k):min(h,i+k+1),max(0,j-k):min(w,j+k+1)])) for j in range(w)] for i in range(h)]
        return res

    def matrixBlockSum_conv(self, mat: List[List[int]], k: int) -> List[List[int]]:
        """ But I don't know why the result is wrong , In particular, the convolution kernel exceeds mat When """
        data = np.array(mat)
        print(data)
        nurcle = np.ones((1+k*2,1+k*2)).astype(np.uint32)
        # nurcle[k][k]=0
        print(nurcle)
        res = signal.convolve2d(data, nurcle, boundary='fill', fillvalue=0).astype(np.uint8)
        # res = signal.convolve2d(data, nurcle, 'same').astype(np.uint8)
        print(res)
        return res.tolist()


def test(data_test):
    s = Solution()
    return s.matrixBlockSum(*data_test)


def test_obj(data_test):
    result = [None]
    obj = Solution(*data_test[1][0])
    for fun, data in zip(data_test[0][1::], data_test[1][1::]):
        if data:
            res = obj.__getattribute__(fun)(*data)
        else:
            res = obj.__getattribute__(fun)()
        result.append(res)
    return result


if __name__ == '__main__':
    datas = [
        # [[[1,2,3],[4,5,6],[7,8,9]],2],
        [[[67,64,78],[99,98,38],[82,46,46],[6,52,55],[55,99,45]],3],
        # [[[1,1,1],[1,2,1],[1,1,1],[1,1,1],[1,1,1]],3],
        # [[[1,1,1,1,1],[1,2,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]],5],
    ]
    for data_test in datas:
        t0 = time.time()
        print('-' * 50)
        print('input:', data_test)
        print('output:', test(data_test))
        print(f'use time:{
      time.time() - t0}s')

remarks :
GitHub:https://github.com/monijuan/leetcode_python

CSDN Summary : Simulation volume Leetcode Summary of questions _ Paper blog -CSDN Blog

You can add QQ Group communication :1092754609

leetcode_python.utils See the description on the summary page for details
First brush questions , Then generated by script blog, If there is any mistake, please leave a message , I see it will be revised ! thank you !

原网站

版权声明
本文为[Encounter simulation volume]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060615157377.html