2013-06-22 42 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

相關問題