需要涉及数组和随机位置的基本Python编程帮助



考虑一个100X100的数组

  1. 生成包含数千个随机位置的数组这样的数组,例如(3,75)和(56,34)。
  2. 计算你的随机位置落在15以内的频率任意(直)边的像素

我试着做上面的问题是为了帮助我学习编程语言Python,我是一个编程新手。

下面是我到目前为止的记录:

from __future__ import division
from pylab import *
import math as m
from numpy import *
array1=[]
nMax=1001
n=1
while n<nMax:
    array1.append(random.randint(1, 101))
    n=n+1
array1=array(array1)
array1=array1.reshape(1000,1)
print array1
array2=[]
nMax=1001
n=1
while n<nMax:
    array2.append(random.randint(1, 101))
    n=n+1
array2=array(array2)
array2=array2.reshape(1000,1)
print array2

生成两个包含1000个随机整数的单列数组。一个数组是x坐标的随机集合另一个数组是y坐标的随机集合。我试着合并这两个数组这样我就有了一个x和y坐标的数组,我该怎么做呢?一旦我有一个随机的x和y坐标的单一数组,我将能够使用if, else语句来完成问题?例如,如果xcoordinate>85或xcoordinate<15或ycoordinate>85或ycoordinate<15然后添加一个数字到空列表,然后使用列表的长度作为计数器?

关于这个问题,有人能给我一些指导吗?我这样做对吗?如果有,我怎么会没有呢?如果是,我该如何继续?

。..谢谢大家的帮助。

我现在已经完成了这两个部分,但现在我面临的挑战是要把它作为前一部分的扩展:

iii)计算你的随机位置落在15个像素以内的频率一个半径为50像素的圆,并将结果写入屏幕上,例如平均数组中N%的位置落在这个区域[N是介于0之间的一个数字]和100]注意,角的坐标在圆圈的15个像素内,那么它们应该包含在这个(如果他们是超过15像素的距离,那么他们不应该) .

iv)添加代码,向用户请求数组中的位置,然后发出警报如果该位置落在该区域,则警告:您选择的位置落在该区域在圆的边缘。

我该怎么做呢?我甚至不知道从哪里开始。有人能给我点建议吗?由于

您可以跳过实际生成数组,直接进行频率计算:

首先,需要注意的是,由于x和y坐标都是完全随机的:

我们有这样的规则:

P(A or B) = P(A) + P(B) - P(A and B)

所以我们可以说

P(X or Y within 15) = P(X within 15) + P(Y within 15) - P(X and Y within 15)

由于这意味着X和Y是0 to 99(或1 to 100)的一致随机的,我们可以假设

P(X within 15) = P(Y within 15)

所以整个变成了

P(X or Y within 15) = 2P(X within 15) - P(X within 15)^2

现在我们只需要计算P(X within 15)。观察到X只能取整数值,因此对于x = 0..14x = 85..99,函数f(x) = |X - 49.5| - 35将大于零。(我们从0开始索引,但它相当于从1...100开始)。

所以,代码:

from random import randrange
N = 3000
P_x_within_15 = sum(abs(randrange(100) - 49.5) - 35 > 0 for _ in range(N)) / float(N)
print "Frequency of X or Y within 15 pixels of edge:",
print 2 * P_x_within_15 - P_x_within_15 ** 2

您可能已经注意到,我们跳过了实际创建数组,而只是在生成随机数时将其布尔值(True/False, True = 1, False = 0)结果相加。

EDIT -实际创建数组

为一个100 x 100的矩阵创建一个随机坐标数组:

如果使用numpy,代码将是:

from random import randrange
N = 3000
coords_array = array([randrange(100) for _ in range(2 * N)]).reshape(N, 2)

使用纯python,它将是:

from random import randrange
N = 3000
coords_list = [(randrange(100), randrange(100)) for _ in range(N)]

有几点需要注意:

  1. 在python中,索引从0开始排序。randrange(100)会给你一个介于0和99之间的数字,包括。

  2. N是我们希望生成的坐标数

  3. 术语点:在python中,方括号表示的数据结构是list,而不是数组(尽管它们等同于其他编程语言中的数组)。在上面的代码中,array1是python list,而不是array(这是一种不同的数据结构)。然而,numpy广泛使用数组。在您的代码中,当您执行array(array1)时,您实际上是在创建一个numpy数组。

  4. 方括号之间的内容称为列表推导式。它在语义上相当于:


coords_list = []
for _ in range(N):
    coords_list.append((randrange(100), randrange(100)))

相关内容

  • 没有找到相关文章

最新更新