2014-11-03 89 views
2

我在這個問題上幾個小時一直在抨擊我的頭,並希望得到任何幫助!在Python 2.7中創建一個由(a,b)點組成的Y維數組的點(a,b)點數

我想創建一個(例如)100x100數組,其中每個索引是一個(x,y)座標。總體目標如下:

我有x,y座標,並希望將它們排列在2D空間中,以便我可以使用np.diagonal函數沿着一條線返回(x,y)座標。然後,我會使用這些(x,y)點來比較特定的值。

這裏的第一步實際上是創建數組,我似乎無法做到這一點。

+0

您能否提供您正在嘗試運行的代碼的一些示例?例如'arr [(x,y)]','arr [x] [y]','arr [x,y]',... – 2014-11-03 18:32:47

+3

您需要使用形狀爲'(100,100, 2)',例如'a = np.empty((100,100,2))'。調用'np.diagonal(a)'將返回形狀爲'(2,100)'的數組。 – Jaime 2014-11-03 20:04:06

+0

嗯,我想我可以使用Jamie的建議,並使用zip(np.diagonal(a)[0],np.diagonal(a)[1])來獲得(x,y)座標的單個列表。我所需要做的就是確保X和Y值正確地輸入到3D數組中。 我不明白的是爲什麼我需要100盒100x2才能做到這一點。 – Ben 2014-11-04 19:36:56

回答

0

我不知道你的要求的numpy的一部分,但你可以創建數組,像這樣:

coords = [[(y,x) for x in range(100)] for y in range(100)] 
>>> coords[50][2] 
(50,2) 
1

上海梅的建議工作:

>>> x, y = numpy.mgrid[0:100, 0:100] 
>>> z = numpy.array([x, y]).transpose([1,2,0]) 
>>> z[50, 2] 
array([50, 2]) 

編輯:給定一個數組形狀(2,P)的點p,這就是你如何找出這些點位於對角線n下面的哪個點:

>>> d = numpy.diagonal(z, n) 
>>> cond0 = p[0, None] < d[0, :, None] 
>>> cond1 = p[1, None] < d[1, :, None] 
>>> good_indices_full = numpy.where(numpy.logical_and(cond0, cond1)) 
>>> good_indices = good_indices_full[1] 

(我更喜歡使用「good_indices」,即編寫諸如p [:, good_indices]之類的東西,而不是numpy.where返回的數組的完整元組)。

+0

因此,這將返回一個單一值([50,2]),這是一個問題,因爲我稍後將評估某個特定點是高於還是低於對角線上的適當點。要做到這一點,我需要每一個落在對角線上的價值,而不僅僅是第一個價值。 – Ben 2014-11-04 19:31:55

+0

對我來說,numpy.diagonal(z)返回形狀數組(2,100),您應該可以在比較中使用它。 – 2014-11-06 11:39:44

1

如果你只是想要沿着對角線的值,爲什麼不建立一維列表?

import numpy as np 
xs = np.linspace(1,10,100) # assuming x goes form 1 to 10 
ys = np.linspace(2,3, 100) # assuming y goes from 2 to 3 
xy = zip(xs, ys) 

您不再需要2d數組,然後調用對角線。

+0

所以這裏的問題是,調用對角線返回單個值,而不是對角線上的每個值,這是我需要的 – Ben 2014-11-04 19:28:54

相關問題