我一直在尝试创建n
x n
高程值网格(以米为单位),峰值是所有四个相邻单元格(北,南,东, West)严格降低。运行该函数时,0
- 9
中的随机整数将显示在单元格中。
示例运行(n == 5
):
2 6 1 7 5
6 8 3 2 6
5 4 1 6 4
4 6 9 5 3
3 4 8 1 2
在上面的网格中,有3个峰:8
,6
和9
。同样,指出打印峰值中峰的坐标(行和列索引)。
例如,"peak: 8m @ location 1,1"
,"peak: 6m @ location 2,3"
等。
同样,指示打印峰值中峰的坐标(行和列索引)。指数应从零开始,即左上角位于索引0,0
。
部分代码:
import numpy as np
import random
n = 5
grid = np.array([random.randrange(10) for i in range(n**2)])
print grid.reshape(n,n)
for row in range(1,n+1):
for col in range(1,n+1):
if grid[row][col] > grid[row-1][col] :
cell = random.randrange(10)
grid.append(cell)
if grid[row][col] > grid[row+1][col]:
cell = random.randrange(10)
grid.append(cell)
if grid[row][col] > grid[row][col+1]:
cell = random.randrange(10)
grid.append(cell)
if grid[row][col] > grid[row][col-1]:
cell = random.randrange(10)
grid.append(cell)
print grid
我不知道如何实施“峰值”的条件。而第二部分真的很不稳定。
答案 0 :(得分:1)
据我所知,你的问题分为两部分。生成地图,找到峰值。
第1部分:生成随机地图
from random import randint
map = []
for y in range(rows):
row = []
for x in range(columns):
row.append(randint(0, 9))
map.append(row)
这应该会产生类似于:
的结果map = [
[5, 3, 4, 4, 6],
[1, 2, 8, 2, 5],
[8, 2, 4, 2, 5],
[9, 5, 9, 6, 3],
[3, 8, 9, 7, 4]
]
第2部分:找到峰值
peaks = [] # list to store peaks
for row in range(map):
for col in range(row): # col is short for column
peak = True
height = map[row][col]
# if adjacent square is higher
# each coordinate has to be checked to see if it is in range
if 0 <= row -1 and map[row-1][col] >= height:
peak = False
elif row + 1 < len(map) and map[row+1][col] >= height:
peak = False
elif 0 <= col - 1 and map[row][col-1] >= height:
peak = False
elif col + 1 < len(map[row]) and map[row][col+1] >= height:
peak = False
if peak: # if taller than adjacent squares
peaks.append((row, col)) # add coordinates to peak list
使用第一个代码中生成的地图,我们可以看到以下结果。
peaks = [
(0, 0),
(4, 0),
(1, 2),
(3, 0),
]