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

python arrays numpy psychopy

76 просмотра

2 ответа

23 Репутация автора

Я пытаюсь сделать массив линейных элементов (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)

Выходные данные, которые я получаю от этого, кажутся двумя отдельными массивами (я предполагаю, что для координат оси x и координат оси y), но они, кажется, перечислены в терминах каждой линии.

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

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

  • под n × 2 я подразумеваю два столбца с 23 × 23 = 529 строк. Столбцы будут для координат x и y соответственно, и 529 строк будут для каждого элемента.
Автор: Cashel Godfrey Источник Размещён: 18.07.2016 11:14

Ответы (2)


0 плюса

276 Репутация автора

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

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

fred.shape
(2, 529)
Автор: R.Sharp Размещён: 18.07.2016 11:48

3 плюса

8248 Репутация автора

Решение

Вы были очень близки, вам просто нужно было создать трехмерный массив координат из, xaxisа yaxisзатем изменить форму этого трехмерного массива, чтобы получить двумерный массив из 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)
Автор: Tonechas Размещён: 18.07.2016 12:11
Вопросы из категории :
32x32