Как получить позиционные координаты (n×2) для равномерно распределенного массива?

Я пытаюсь создать массив линейных элементов (сетка 23×23), используя ElementArrayStim от PsychoPy.

Для параметра 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 отдельных массива (я предполагаю, что это координаты по оси x и координаты по оси y), но они, кажется, перечислены с точки зрения каждой строки.

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

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

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

person Cashel Godfrey    schedule 18.07.2016    source источник


Ответы (2)


Вы были очень близки, просто нужно было создать 3D-массив координат из xaxis и yaxis, а затем изменить форму этого 3D-массива, чтобы получить 2D-массив 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)
person Tonechas    schedule 18.07.2016
comment
Большое спасибо @Tonechas. Использование транспонирования (.T) было не таким эффективным, как первое ваше предложение, которое работает блестяще. - person Cashel Godfrey; 21.07.2016

Вам нужно перебирать обе оси, добавляя каждый элемент в массив по мере продвижения?

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

fred.shape
(2, 529)
person R.Sharp    schedule 18.07.2016