2013-06-22 41 views
3

我想创建一个numpy数组的坐标。直到现在,我一直只使用x_coords, y_coords = numpy.indices((shape))。然而,现在我想将x_coordsy_coords组合成一个数组,这样x_coords = thisArray[:,:,0]y_coords = thisArray[:,:,1]在这种情况下,thisArray是一个二维数组。有没有简单或pythonic的方式来做到这一点?Pythonic的方式来创建一个numpy坐标数组

我原本以为使用numpy.outer,但这并不能给我所需。一个可能的想法就是沿着(2nd?)轴使用索引数组的连接,但这似乎不是一个非常优雅的解决方案。 (虽然这可能是最干净的一个)。

谢谢!

回答

2

什么np.indices返回已经是一个数组,但是x_coords = thisArray[0, :, :]y_coords = thisArray[1, :, :]。除非你有你的坐标(即它是连续的),你可以采取的阵列的视图与第一轴rolled到最后的阵列非常严格的要求:

thisArray = numpy.rollaxis(numpy.indices(shape), 0, len(shape)+1) 
+0

嗯,这似乎工作 - 你是什​​么意思,但条件是它是连续的。 (你是在谈论它在内存中的位置?) – James

+1

当你滚动轴时,数据的内存布局没有改变,只有数组的步幅。在内存中,所有的x坐标将在内存部分的开始处,然后是所有的y坐标。如果直接使用后面的形状创建阵列,则x和y坐标将在内存中交替显示。对于一些奇特的东西,实际的内存布局可能会减慢某些计算速度,或者需要缓慢的阵列副本。例如,你不能将一个不连续的数组提供给'np.frombuffer'。但对于大多数应用程序来说,这根本不是问题。 – Jaime

+0

恩,好的,谢谢。还有一个问题。假设我想扁平第二和第三轴。 (因为我真的不在乎他们在什么顺序。我几乎只想要一个向量数组)。我怎么能这样做呢? – James

相关问题