我在這個問題上幾個小時一直在抨擊我的頭,並希望得到任何幫助!在Python 2.7中創建一個由(a,b)點組成的Y維數組的點(a,b)點數
我想創建一個(例如)100x100數組,其中每個索引是一個(x,y)
座標。總體目標如下:
我有x,y座標,並希望將它們排列在2D空間中,以便我可以使用np.diagonal
函數沿着一條線返回(x,y)
座標。然後,我會使用這些(x,y)
點來比較特定的值。
這裏的第一步實際上是創建數組,我似乎無法做到這一點。
我在這個問題上幾個小時一直在抨擊我的頭,並希望得到任何幫助!在Python 2.7中創建一個由(a,b)點組成的Y維數組的點(a,b)點數
我想創建一個(例如)100x100數組,其中每個索引是一個(x,y)
座標。總體目標如下:
我有x,y座標,並希望將它們排列在2D空間中,以便我可以使用np.diagonal
函數沿着一條線返回(x,y)
座標。然後,我會使用這些(x,y)
點來比較特定的值。
這裏的第一步實際上是創建數組,我似乎無法做到這一點。
我不知道你的要求的numpy的一部分,但你可以創建數組,像這樣:
coords = [[(y,x) for x in range(100)] for y in range(100)]
>>> coords[50][2]
(50,2)
上海梅的建議工作:
>>> 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返回的數組的完整元組)。
因此,這將返回一個單一值([50,2]),這是一個問題,因爲我稍後將評估某個特定點是高於還是低於對角線上的適當點。要做到這一點,我需要每一個落在對角線上的價值,而不僅僅是第一個價值。 – Ben 2014-11-04 19:31:55
對我來說,numpy.diagonal(z)返回形狀數組(2,100),您應該可以在比較中使用它。 – 2014-11-06 11:39:44
如果你只是想要沿着對角線的值,爲什麼不建立一維列表?
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數組,然後調用對角線。
所以這裏的問題是,調用對角線返回單個值,而不是對角線上的每個值,這是我需要的 – Ben 2014-11-04 19:28:54
您能否提供您正在嘗試運行的代碼的一些示例?例如'arr [(x,y)]','arr [x] [y]','arr [x,y]',... – 2014-11-03 18:32:47
您需要使用形狀爲'(100,100, 2)',例如'a = np.empty((100,100,2))'。調用'np.diagonal(a)'將返回形狀爲'(2,100)'的數組。 – Jaime 2014-11-03 20:04:06
嗯,我想我可以使用Jamie的建議,並使用zip(np.diagonal(a)[0],np.diagonal(a)[1])來獲得(x,y)座標的單個列表。我所需要做的就是確保X和Y值正確地輸入到3D數組中。 我不明白的是爲什麼我需要100盒100x2才能做到這一點。 – Ben 2014-11-04 19:36:56