2013-04-10 65 views
2

考虑一个100X100阵列。 i)在这样的阵列内产生数千个随机位置的阵列,例如, (3,75)和(56,34)。 ii)计算一个随机位置落在任何(直线)边缘的15个像素内的频率。需要基本的Python编程帮助:数组和随机位置

我想要做上面的问题,以帮助我学习编程语言Python,我是编程新手。

这是我迄今为止得到:

from __future__ import division 
from pylab import * 
import math as m 
from numpy import * 
from random import randrange 

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

这将创建N个随机位置的阵列,并没有我想创建一个循环,将一个1附加到一个空列表,如果x> 85或y> 85或x < 15或y < 15,然后如果x或y是别的,则将零附加到同一个空列表。然后,我会找到列表的总和,这将是我的随机位置落在边缘内的数量。

这是我试图做这样的事情:

coordinate=coords_array[x,y] 
b=[] 
def location(x,y): 
    if x>85 or y>85: 
     b.appnend(1) 
    if x<15 or y<15: 
     b.append(1) 
    else: 
     b.append(0) 


print b 
print x 

,但我有麻烦分配数组变量x和y。我希望能够将一组随机坐标的每一行分配为x,y对,以便我可以在循环中使用它。

但我不知道该怎么做!

请有人告诉我该怎么做?

谢谢

+1

只是一个快速提示。你可以像这样产生随机位置:'coords_array = randint(100,size =(3000,2))'。 'randint'来自'numpy.random' – 2013-04-10 12:07:56

+0

因此,如果列表中包含的坐标大于85,那么您希望列表增加两个元素,否则只有一个元素?这是打算吗? – SingleNegationElimination 2013-04-10 12:13:12

+0

这是三个几乎相同的问题之一。特别是,你可以从这里学到什么[这里回答](http://stackoverflow.com/questions/15903051/basic-python-programming-help-needed-involving-arrays-and-random-locations)? – YXD 2013-04-10 12:43:22

回答

1

好吧,这个问题的答案:

,但我有麻烦分配数组变量x和y。我 希望能够分配组随机坐标中的每一行作为一个 x,y对,这样我可以在我的循环使用

会是这样:

for pair in coords_array: 
    # Do something with the pair 

NumPy的阵列通过让for迭代它们的主轴来表现为常规Python序列,这意味着pair将包含一个(在你的情况下)两个元素:x和y的数组。你也可以这样做:

for x, y in coords_array: 
    # Do something with the pair 

NB:我想你想写这样的功能:

def location(x,y): 
    if x>85 or y>85: 
     b.append(1) 
    elif x<15 or y<15: 
     b.append(1) 
    else: 
     b.append(0) 

def location(x,y): 
    if x>85 or y>85 or x<15 or y<15: 
     b.append(1) 
    else: 
     b.append(0) 

甚至

def location(x,y): 
    if not (15 <= x <= 85) or not (15 <= y <= 85): 
     b.append(1) 
    else: 
     b.append(0) 

否则,就像@TokenMacGuy指出的那样,你会插入在某些情况下有两个值。

NB:从你的问题我知道你想专门写代码来学习Python,但你可以通过只使用NumPy的功能做在一个更简单的(和有效)的方式

1

你可以让numpy的为你做的循环:

n = 3000 
coords = np.random.randint(100, size=(n, 2)) 
x, y = coords.T 
is_close_to_edge = (x < 15) | (x >= 85) | (y < 15) | (y >= 85) 
count_close_to_edge = np.sum(is_close_to_edge) 

注意,一个100元数组的第一个指数是0,最后的99,内边缘是0 ... 14和85的15个职位,因此项目... 99 ,因此在>=的比较。在上面的代码中,is_close_to_edge是您的列表,具有布尔值。