簡體   English   中英

將兩個不同數據類型的1D陣列組合成PYTHON中的1個2D陣列

[英]Combining two 1D arrays of different data types into 1 2D array in PYTHON

我有2個數字列表:a和b。 A是類型為integer的節點號列表,b是類型為float64的X坐標列表。 我想將這兩個等長數組(N)組合成一個保留數據類型的Nx2數組。 我稍后在一些布爾測試中使用這個數組,所以我需要第一列是整數。 我一直在用:

nodeID = np.concatenate([[a],[b]]).T

但顯然這會將所有內容轉換為浮點數。

謝謝!

實現目標的一種方法是使用numpydtypehttp://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html中所述。

>>> import numpy as np
>>> dt = np.dtype([('a', np.int64, 1), ('b', np.float64, 1)])
>>> a = np.array([1,2,3,4], dtype=np.int64)
>>> b = np.array([1.,2.,3.,4.], dtype=np.float64)
>>> ab = np.array(zip(a,b), dtype=dt)
>>> ab[:]['a']
array([1, 2, 3, 4])
>>> ab[:]['b']
array([ 1.,  2.,  3.,  4.])

你可以在這里使用zip()。 如果你只是比較列表a的元素,那么這里的問題是什么?

a =[1,2,3,4]
b =["Hello", "world", "fellow"]

x=zip(a,b)
print x

for a,b in x:
  if a == someThing:
     doSomething()

我假設是因為你在標題中提到了一個2D列表,你想要一個如下所示的列表,其中每個節點和coord都保留了它們的類型:

[[node1, coord1], [node2, coord2], ... ]

您可以在沒有任何模塊的三個快速行中執行此操作,保留每個變量的類型:

nodeID = []
for i, node in enumerate(a):
    nodeID.append([node, b[i]])

因此,您將擁有一個2D列表。 2D列表中的每個元素本身都是包含一對節點和坐標的另一個列表。 由於Python對類型不敏感,因此將保留節點和坐標的類型。 您將訪問每對:

pair1 = nodeID[0]
pair2 = nodeID[1]
pairx = nodeID[x]

他們的內容包括:

node1 = nodeID[0[0]]
node2 = nodeID[1[0]]
coord1 = nodeID[0[1]]
coord2 = nodeID[1[1]]

希望這會有所幫助。 :-)

zip功能是最簡單的方式。 簡短的例子:

>>> a = [1, 2, 3, 4, 5]
>>> b = [1.1, 2.2, 3.3, 4.4, 5.5]
>>> zip(a,b)
[(1, 1.1), (2, 2.2), (3, 3.3), (4, 4.4), (5, 5.5)]
>>> 

如果你想從zip(a,b)獲得a ,只需寫:

>>> [x[0] for x in zip(a, b)]
[1, 2, 3, 4, 5]

一個好主意是從兩個列表中創建字典:

>>> keys = [1,2,3,4,5]
>>> values = [1.1,2.2,3.3,4.4,5.5]
>>> dictionary = dict(zip(keys, values))
>>> dictionary
{1: 1.1, 2: 2.2, 3: 3.3, 4: 4.4, 5: 5.5}

但要小心,字典中的順序不會保存。 從字典訪問數據非常簡單:

>>> dictionary.keys()
[1, 2, 3, 4, 5]
>>> dictionary.values()
[1.1, 2.2, 3.3, 4.4, 5.5]
>>> dictionary[1]
1.1
>>> 

暫無
暫無

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

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