2016-07-18 4 views
1

Я пытаюсь создать массив элементов линии (сетка 23 × 23), используя ElementArrayStim от PsychoPy.Как получить позиционные координаты (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 отдельных массивов (я предполагаю, что для координат х-оси и y- координаты оси), но они, по-видимому, перечислены в терминах каждой строки.

Однако PsychoPy принимает только входы n × 2 для параметра `xys, и я не уверен, как мне перейти к изменению формы вывода так, чтобы оно было в виде n × 2.

Кроме того, если метод, который я использую, является неправильным/неэффективным, что было бы лучшим способом для достижения позиционных элементов xys в форме × × 2?

  • по n × 2, я имею в виду два столбца с 23 × 23 = 529 строк. Столбцы будут для координат x и y соответственно, а 529 строк будут для каждого элемента.

ответ

3

Вы были очень близки, просто нужно, чтобы создать 3D массив координат из xaxis и yaxis, а затем изменить что 3D массив, чтобы получить 529 на строки × 2 столбца 2D массива в соответствии с требованиями:

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^