2013-04-10 48 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是您的列表,具有布爾值。