创建0和1的板(Numpy 2D数组)

时间:2019-03-08 20:24:57

标签: python arrays numpy

在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的范围”。

2 个答案:

答案 0 :(得分:2)

您已交换行和列索引。您应该使用

city[j, i] = 1

因为第一个索引对应于行,第二个索引对应于列。

或者,您可以保持ij的顺序并使用

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将为您执行循环