Python 创建一个特定于大小的Numpy数组,然后以步进速率填充值

Python 创建一个特定于大小的Numpy数组,然后以步进速率填充值,python,arrays,numpy,Python,Arrays,Numpy,我是一个完全迷路的新手,他的目标是编写一个脚本,创建一个随机整数网格,其中用户输入指定行数、列数、高值和低值,以及计算高值和低值之间的值的步骤(例如,按2从0到10计数)。使用该输入,然后用符合条件的随机生成的整数填充网格。我知道我可以使用“np.arange”设置范围和步长值,然后使用resize将数组调整到正确的大小,但我完全坚持的是,一旦数组调整大小以适应范围和步长值,就可以获得数组中其余的0值。我该怎么做呢?到目前为止,我的代码是: num_rows = int(raw_input("H

我是一个完全迷路的新手,他的目标是编写一个脚本,创建一个随机整数网格,其中用户输入指定行数、列数、高值和低值,以及计算高值和低值之间的值的步骤(例如,按2从0到10计数)。使用该输入,然后用符合条件的随机生成的整数填充网格。我知道我可以使用“np.arange”设置范围和步长值,然后使用resize将数组调整到正确的大小,但我完全坚持的是,一旦数组调整大小以适应范围和步长值,就可以获得数组中其余的0值。我该怎么做呢?到目前为止,我的代码是:

num_rows = int(raw_input("How many rows in the raster? "))
num_cols = int(raw_input("How many columns in the raster? "))
low_range = int(raw_input("What is the lowest value in the raster? "))
hi_range = int(raw_input("What is the highest value in the raster? "))
step_range = int(raw_input("What is the value step you would like? "))

user_raster = np.arange(low_range,hi_range,step_range)
user_raster2 = user_raster.resize((num_rows, num_cols), refcheck=False)
使用5行、5列、低值0、高值10和两步执行此操作将导致

[[0 2 4 6 8]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]
那么,我如何在第2步中将0替换为值0-10呢?我知道有像“附加”和“插入”这样的选项,但这些选项并没有给我以步进速率进行操作的选项


或者(很可能)有更好的方法来解决这个问题?我意识到的一个关键缺陷是,高值高于行计数,那么在随机生成时,值的顶部范围将被截断,而不会放置在网格中

您的
user\u光栅
阵列在您的示例中只有5个元素长,当您将其调整为5x5
np.ndarray.resize
时,会用零填充额外的空间。您可以使用
np.resize
(为
ndarray.resize
行为添加了强调):

定义:np.resize(一个新的形状)

Docstring:返回一个新数组 具有指定的形状

如果新阵列大于原始阵列,则新阵列 包含重复的
a
。请注意,此行为是 与a.resize(新的_形状)不同,用零填充,而不是 重复复制
a

这种类型的数组可以使用的技巧是使用
np.mgrid

low = 0
hi = 10
step = 2
axis = 1  # horizontal

np.mgrid[low:hi:step, low:hi:step][axis]
# Output:
array([[0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8]])
low = 0
hi = 10
step = 2
axis = 1  # horizontal

np.mgrid[low:hi:step, low:hi:step][axis]
# Output:
array([[0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8]])