2016-07-18 59 views
1

我正在嘗試使用PsychoPy的ElementArrayStim製作線元素(23×23網格)的數組。如何獲得均勻間隔陣列的位置座標(n×2)?

對於線條元素位置的xys參數,我試圖以統一的方式(23×23網格)定位線元素。

我曾嘗試通過執行以獲得元素的位置如下:

nx, ny = (23, 23) 
xaxis = np.linspace(-220, 220, nx) 
yaxis = np.linspace(-220, 220, ny) 

yx = np.meshgrid(xaxis, yaxis) 

我從接收的輸出好像是2門獨立的陣列(I承擔的x軸座標和y軸座標),但它們似乎是按照每條線列出的。

但是,PsychoPy只接受xx參數的n×2個輸入 - 我不知道該如何去改變輸出的形狀,所以它的形式是n×2。

另外,如果我使用的方法不正確/效率低下,那麼在n×2形狀中實現xys位置元素的最佳方法是什麼?

  • n×2,我的意思是兩列23×23 = 529行。列將分別用於x和y座標,529行將用於每個元素。

回答

3

你是非常接近的,只是需要從xaxisyaxis創建座標的三維數組,然後重塑該三維陣列來獲得一個529行×2列的二維數組作爲需要:

In [21]: xy = np.dstack(np.meshgrid(xaxis, yaxis)).reshape(-1, 2) 

In [22]: xy 
Out[22]: 
array([[-220, -220], 
     [-200, -220], 
     [-180, -220], 
     ..., 
     [ 180, 220], 
     [ 200, 220], 
     [ 220, 220]]) 

In [23]: xy.shape 
Out[23]: (529L, 2L) 

或者,您可以通過以下方法獲得相同的結果:

xy = np.mgrid[-220:240:20, -220:240:20].T.reshape(-1, 2) 
+0

非常感謝@Tonechas。 使用轉置(.T)並不像您的第一個建議那樣有效 - 這非常出色。 –

0

您是否需要循環遍歷兩個軸,將每個元素追加到數組中?

fred=np.array([[],[]]) 
for column in xaxis: 
    for row in yaxis: 
     fred = np.append(fred, [[column], [row]], 1) 

fred.shape 
(2, 529)