在Jupyter Notebook上使用Python 3.7进行工作。我正在尝试创建一个函数,该函数返回0和1的NumPy 2D数组(“板”)。该功能应具有列,行和我希望电路板具有的1的百分比的输入。我的教授建议创建一个由零组成的数组,然后遍历每个数组,并使用random.uniform(0,1)生成一个随机数以创建棋盘。或者,他的另一建议是使用numpy.random.rand而不是制服。我不知道如何使用统一函数来执行此操作,但是完全可以接受。这就是我现在拥有的:
import numpy as np
import numpy.random as rand
import matplotlib.pyplot as plt
%matplotlib inline
import time
from IPython.display import display, clear_output
#I want my board to have 10 columns, 5 rows, and have 60% of values in it be 1's...
def set_board(columns=10,rows=5,people_percent=.6):
city = np.zeros([rows,columns],dtype='int64')
#I assume this is where I'm running into my error; specifically the "city[i,j]" part:
for i in range(columns):
for j in range(rows):
if rand.random() <= people_percent:
city[i,j] = 1
return city
但是,当我运行set_board()时,出现错误“索引5超出轴5尺寸5的范围”。
答案 0 :(得分:2)
您已交换行和列索引。您应该使用
city[j, i] = 1
因为第一个索引对应于行,第二个索引对应于列。
或者,您可以保持i
和j
的顺序并使用
for i in range(rows):
for j in range(columns):
if rand.random() <= people_percent:
city[i,j] = 1
答案 1 :(得分:2)
您可以使用numpy创建随机数矩阵,然后通过测试将其首先转换为True
/ False
,然后转换为0
/ 1
。 / p>
res = numpy.uint8(
numpy.random.uniform(size=(rows, columns))
> people_percent
)
通过这种方式numpy
将为您执行循环