簡體   English   中英

將一維Numpy陣列重塑為二維

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM