【问题标题】:How to get positional coordinates (n×2) for a uniformly spaced array?如何获得均匀间隔数组的位置坐标(n×2)?
【发布时间】:2016-07-18 11:14:15
【问题描述】:

我正在尝试使用 PsychoPy 中的 ElementArrayStim 制作一个线元素数组(23×23 网格)。

对于线元素位置的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 的形式。

另外,如果我使用的方法不正确/效率低下,那么在 n×2 形状中实现 xys 位置元素的最佳方法是什么?

  • n×2,我的意思是两列,23 × 23 = 529 行。列将分别用于 x 和 y 坐标,529 行将用于每个元素。

【问题讨论】:

    标签: python arrays numpy psychopy


    【解决方案1】:

    您非常接近,只需要从 xaxisyaxis 创建一个坐标的 3D 数组,然后根据需要重塑该 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)
    

    【讨论】:

    • 非常感谢@Tonechas。使用转置 (.T) 不如您的第一个建议有效 - 效果很好。
    【解决方案2】:

    您是否需要在两个轴上循环,将每个元素附加到数组中?

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

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多