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:5
中 v=3
的值填充矩阵。
它依次用 1:4
行和 1:4
列中 v-1=2
的值填充矩阵,直到中心得到 1
.
的最终值
我的问题是我需要一个二维数组,它在矩阵的中心保存值 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:5
中 v=3
的值填充矩阵。
它依次用 1:4
行和 1:4
列中 v-1=2
的值填充矩阵,直到中心得到 1
.