我有两个数字列表:a和b。 A是类型为integer的节点号列表,b是类型为float64的X坐标列表。我想将这两个等长数组(N)组合成一个保留数据类型的Nx2数组。我稍后在一些布尔测试中使用这个数组,所以我需要第一列是整数。我一直在使用:
nodeID = np.concatenate([[a],[b]]).T
但显然这会将所有内容转换为浮点数。
谢谢!
答案 0 :(得分:3)
实现目标的一种方法是使用http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html中记录的numpy
dtype
>>> 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.])
答案 1 :(得分:0)
你可以在这里使用zip()。如果你只是比较列表a的元素,那么这里的问题是什么?
xlWorkBook = xlApp.Workbooks.Open("1010-AgentPerformancebyPeriod-2015081214195339.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true);
答案 2 :(得分:0)
我假设因为您在标题中提到了一个2D列表,您希望列表如下所示,其中每个节点和坐标都保留了其类型:
[[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]]
希望这会有所帮助。 : - )
答案 3 :(得分:0)
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)]
>>>
如果您想从a
获取zip(a,b)
,请写下:
>>> [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
>>>