簡體   English   中英

在保留格式的同時將多維數組轉換為元組-python

[英]Converting multidimensional array to tuple while conserving format- python

我正在嘗試將具有不同格式的多維數組轉換為元組,同時保留不同的格式。 這是構建數組的代碼

nodeData=np.empty((npoints*npoints,4))
ii=0
for i in range (npoints):
    for j in range (npoints):
        nodeData[ii,0]=int(ii+1)
        nodeData[ii,1]=float(X[i,j])
        nodeData[ii,2]=float(Y[i,j])
        nodeData[ii,3]=float(Z[i,j])
        ii+=1

哪個輸出

[[  1.          10.           2.           0.        ]
 [  2.           9.23463314   1.84775906   0.        ]
 [  3.           8.58578682   1.41421354   0.        ]
 [  4.           8.15224103   0.76536686   0.        ]
 [  5.           8.           0.           0.        ]
 [  6.          10.           4.           0.        ]
 [  7.           8.14486726   3.94570562   0.        ]
 [  8.           6.43933982   3.56066012   0.        ]
 [  9.           6.05429438   1.8551327    0.        ]
 [ 10.           6.           0.           0.        ]
 [ 11.          10.           6.           0.        ]
 [ 12.           7.07624214   6.00295346   0.        ]
 [ 13.           4.29289317   5.70710671   0.        ]
 [ 14.           3.99704657   2.92375783   0.        ]
 [ 15.           4.           0.           0.        ]
 [ 16.          10.           8.           0.        ]
 [ 17.           6.02814844   8.02067549   0.        ]
 [ 18.           2.14644665   7.85355332   0.        ]
 [ 19.           1.97932457   3.97185155   0.        ]
 [ 20.           2.           0.           0.        ]
 [ 21.          10.          10.           0.        ]
 [ 22.           5.          10.           0.        ]
 [ 23.           0.          10.           0.        ]
 [ 24.           0.           5.           0.        ]
 [ 25.           0.           0.           0.        ]]

現在,當我嘗試使用nodeData = tuple(map(tuple, nodeData))將其轉換為元nodeData = tuple(map(tuple, nodeData))我獲得

((1.0, 10.0, 2.0, 0.0), (2.0, 9.234633143257458, 1.847759058732358, 0.0), (3.0, 8.5857868194580078, 1.4142135381698608, 0.0), (4.0, 8.1522410342120963, 0.76536686381751795, 0.0), (5.0, 8.0, 0.0, 0.0), (6.0, 10.0, 4.0, 0.0), (7.0, 8.144867260307727, 3.9457056195410947, 0.0), (8.0, 6.439339816570282, 3.5606601238250732, 0.0), (9.0, 6.0542943801670015, 1.8551327030961533, 0.0), (10.0, 6.0, 0.0, 0.0), (11.0, 10.0, 6.0, 0.0), (12.0, 7.0762421416553485, 6.0029534580819224, 0.0), (13.0, 4.2928931713104248, 5.7071067094802856, 0.0), (14.0, 3.997046571142258, 2.9237578279641867, 0.0), (15.0, 4.0, 0.0, 0.0), (16.0, 10.0, 8.0, 0.0), (17.0, 6.028148440014629, 8.0206754926510051, 0.0), (18.0, 2.1464466452598572, 7.8535533249378204, 0.0), (19.0, 1.9793245736169094, 3.9718515524632179, 0.0), (20.0, 2.0, 0.0, 0.0), (21.0, 10.0, 10.0, 0.0), (22.0, 5.0, 10.0, 0.0), (23.0, 0.0, 10.0, 0.0), (24.0, 0.0, 5.0, 0.0), (25.0, 0.0, 0.0, 0.0))

當我嘗試將每行的第一個值保存為整數時,它已將所有值轉換為浮點數:

((1, 10.0, 2.0, 0.0),
 (2, 9.234633143257458, 1.847759058732358, 0.0), 
(3, 8.5857868194580078, 1.4142135381698608, 0.0), 
(4, 8.1522410342120963, 0.76536686381751795, 0.0), 
(5, 8.0, 0.0, 0.0), 
(6, 10.0, 4.0, 0.0), 
(7, 8.144867260307727, 3.9457056195410947, 0.0), 
(8, 6.439339816570282, 3.5606601238250732, 0.0), 
(9, 6.0542943801670015, 1.8551327030961533, 0.0), 
(10, 6.0, 0.0, 0.0), 
(11, 10.0, 6.0, 0.0), 
(12, 7.0762421416553485, 6.0029534580819224, 0.0), 
(13, 4.2928931713104248, 5.7071067094802856, 0.0), 
(14, 3.997046571142258, 2.9237578279641867, 0.0), 
(15, 4.0, 0.0, 0.0), 
(16, 10.0, 8.0, 0.0), 
(17, 6.028148440014629, 8.0206754926510051, 0.0), 
(18, 2.1464466452598572, 7.8535533249378204, 0.0), 
(19, 1.9793245736169094, 3.9718515524632179, 0.0), 
(20, 2.0, 0.0, 0.0), 
(21, 10.0, 10.0, 0.0), 
(22, 5.0, 10.0, 0.0), 
(23, 0.0, 10.0, 0.0), 
(24, 0.0, 5.0, 0.0), 
(25, 0.0, 0.0, 0.0))

或者,無論如何都可以在不構建數組的情況下獲得最終結果,而是直接以正確的格式構建元組? 任何幫助將不勝感激。

您不能逐步構建元組,因為元組是不可變的。 但是您可以構建一個列表,然后將其轉換為元組。

nodeData = []
ii = 1
for i in range (npoints):
    for j in range (npoints):
        nodeData.append((ii, float(X[i,j]), float(Y[i,j]), float(Z[i,j])))
        ii += 1
nodeData = tuple(nodeData)

當你第一次創建nodeData陣列,您可以檢查dtype和通知該數組類型float64 (見下文print語句):

npoints = 25
nodeData=np.empty((npoints*npoints,4))
print(nodeData.dtype)

'float64'

這意味着當您稍后分配整數時,它會自動轉換為浮點數(請參閱下面的打印語句):

npoints = 25
nodeData=np.empty((npoints*npoints,4))
ii=0
for i in range (npoints):
    for j in range (npoints):
        nodeData[ii,0]=int(ii+1)
        print(nodeData[ii,0].dtype)

'float64'...

正如@barmar 所建議的那樣,您必須以不會將整數值轉換為浮點數的方式構建一組元組(在 numpy 數組中設置值的方式將自動轉換為匹配數組類型)。

作為 Barmar 答案的替代方案,您還可以使用生成器:

def generate():
    for i in range(npoints):
        for j in range(npoints):
            yield (int(ii+1), float(X[i,j]), float(Y[i,j]), float(Z[i,j]))
            ii += 1

nodeData = tuple(generate())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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