[英]How to reshape an 1-D numpy array into 2-D numpy array with values by rows
[英]Reshape 1-D Numpy Array to 2-D
我有一個由(doc here )創建的38(x,y)坐標的一維numpy數組:
npArray = arcpy.da.FeatureClassToNumPyArray(fc,["SHAPE@XY"])
這將輸出(38,)數組,例如:
[([X1, Y1],)
([X2, Y2],)
...
([X38, Y38],)]
編輯:這是實際輸出的前5行和dtype:
[([614276.776070848, 6086493.437772478],)
([626803.3576861953, 6101090.488548568],)
([627337.6049131282, 6100051.791447324],)
([627340.8526022129, 6099601.263191574],)
([629011.3422856168, 6099079.306533674],)
dtype([('SHAPE@XY', '<f8', (2,))])
但我想要一個(38,2)數組,例如:
[(X1, Y1)
(X2, Y2)
...
(X38, Y38)]
我如何做到這一點?
我試過了
numpy.reshape(npArray, (-1,2))
但這會將坐標對改組為(19,2)數組。
文檔http://resources.arcgis.com/zh-CN/help/main/10.1/index.html#//018w00000015000000說,它返回一個結構化數組。
由於dtype
為:
dtype([('SHAPE@XY', '<f8', (2,))
您可以按名稱訪問此field
npArray['SHAPE@XY']
結果應該是(38,2)
數組。 這將是一個view
上的原始。
從頭開始創建像這樣的結構化數組有些棘手,因為numpy
嘗試創建可以做到的最大維數數組。 最可靠的方法是創建一個具有所需大小和dtype的空數組,然后逐字段分配值。
In [56]: X=np.zeros((5,),dtype=([('f0',int,(2,))]))
In [57]: X
Out[57]:
array([([0, 0],), ([0, 0],), ([0, 0],), ([0, 0],), ([0, 0],)],
dtype=[('f0', '<i4', (2,))])
In [58]: X['f0']=np.arange(10).reshape(5,2)
In [59]: X
Out[59]:
array([([0, 1],), ([2, 3],), ([4, 5],), ([6, 7],), ([8, 9],)],
dtype=[('f0', '<i4', (2,))])
In [60]: X['f0']
Out[60]:
array([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
numpy.squeeze(numpy.array(npArray))是否有效? 如果沒有,您可以發布帶有數字的數組嗎?
編輯:我沒有使用arcpy(可能值得在問題中對此進行標記),但是來自這里的文檔: http : //resources.arcgis.com/en/help/main/10.1/index.html#//018w00000015000000
看來您需要使用npArray [“ SHAPE @ XY”]訪問numpy數組。 然后,該陣列應該已經是所需的形狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.