Python 数字递增的矩阵

Python matrix with increasing numbers

我的问题是我需要一个二维数组,它在矩阵的中心保存值 1,然后其他数字从该点继续。例如,当输入为 3 时,矩阵应如下所示:

[[3, 3, 3, 3, 3],
[3, 2, 2, 2, 3],
[3, 2, 1, 2, 3],
[3, 2, 2, 2, 3],
[3, 3, 3, 3, 3]]

到目前为止,这是我的代码:

import pprint

def func(number):
    d = [[0] for i in range(number + (number - 1))]
    #? Create the matrix with 0 value inside each index and determine the amount of columns

    for i in d:
        d[d.index(i)] = [number] * (number + (number - 1))
        #? Add values to the indexes
        #?              [value inside] * [length of a row]


    centre = len(d) // 2
    #? centre is the index value of the list which contains the number 1
    
    pprint.pprint(d)

func(3)

结果是这样的:

[[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3],
[3, 3, 3, 3, 3]]

我的方法是用给定的数字填充整个 table,然后在没有第一个和最后一个数组的情况下处理 table 的其余部分,因为它们不会改变并且它们的值永远是数量乘以必要的数量。

我什至知道中心在二维数组的哪个索引处。但是,我被困在这里。我不确定如何从这里继续。

每个索引处的值由(行索引到中心的距离,列索引到中心的距离)的最大值给出。所以,你可以这样做:

n = 3
dim = 2 * n - 1

result = [
    [
        max(abs(row - dim // 2), abs(col - dim // 2)) + 1
        for col in range(dim)
    ]
    for row in range(dim)
]

print(result)

这输出:

[[3, 3, 3, 3, 3],
[3, 2, 2, 2, 3],
[3, 2, 1, 2, 3],
[3, 2, 2, 2, 3],
[3, 3, 3, 3, 3]]

有趣的问题!

这是我想出的。它比您的实现要短得多:

import numpy as np
mdim = (5, 5) # specify your matrix dimensions
value = 3 # specify the outer value
matrix = np.zeros(mdim) # initiate the matrix
for i, v in enumerate(range(value, 0, -1)):  # let's fill it!
    matrix[i:(mdim[0]-i), i:(mdim[1]-i)] = v
print(matrix)

输出如愿!可能可以稍微调整一下。

说明: 它首先创建一个维度为 mdim 的零矩阵。 然后,它用行 0:5 和列 0:5v=3 的值填充矩阵。 它依次用 1:4 行和 1:4 列中 v-1=2 的值填充矩阵,直到中心得到 1.

的最终值