我正在尝试将列表列表以及列表中的其他一些数字转换为numpy数组。
到目前为止,我已经尝试过了,但是列表仍然保留到数组中:
ll = [['119', '222', '219', '293'], '4', ['179', '124', '500', '235'], '7']
arrays = np.array(ll)
输出为:
array([list(['119', '222', '219', '293']), '4', list(['179', '124', '500', '235']), '7'], dtype=object)
我想要的输出是这样的:
[(array([ 119, 222, 219, 293]), 4), (array([ 179, 124, 500, 235]), 7)]
有没有办法做到这一点。最近两天,我一直在努力做到这一点。
答案 0 :(得分:3)
由于您要将每两个元素分组为一个元组,然后将每个元组的第一个元素转换为一个numpy数组,因此可以对 zip
使用列表推导:< / p>
[(np.array(i, dtype=int), int(j)) for i, j in zip(ll[::2], ll[1::2])]
# Result
[(array([119, 222, 219, 293]), 4), (array([179, 124, 500, 235]), 7)]
请注意,我在numpy数组构造函数中指定了 dtype
,将数组转换为整数。
如果您担心要在此处制作列表的两个副本,则还可以简单地使用基于范围的索引:
[(np.array(ll[i], dtype=int), int(ll[i+1])) for i in range(0, len(ll), 2)]
答案 1 :(得分:2)
您可以创建一个结构化数组:
In [96]: ll = [['119', '222', '219', '293'], '4', ['179', '124', '500', '235'], '7']
In [97]: dt = np.dtype('4i,i')
In [98]: arr = np.zeros(2, dtype=dt)
In [99]: arr
Out[99]:
array([([0, 0, 0, 0], 0), ([0, 0, 0, 0], 0)],
dtype=[('f0', '<i4', (4,)), ('f1', '<i4')])
In [100]: arr['f0']=ll[::2]
In [101]: arr['f1']=ll[1::2]
In [102]: arr
Out[102]:
array([([119, 222, 219, 293], 4), ([179, 124, 500, 235], 7)],
dtype=[('f0', '<i4', (4,)), ('f1', '<i4')])
并提取到列表中
In [103]: arr.tolist()
Out[103]:
[(array([119, 222, 219, 293], dtype=int32), 4),
(array([179, 124, 500, 235], dtype=int32), 7)]
或2x2对象dtype数组:
In [104]: np.array(arr.tolist(),dtype=object)
Out[104]:
array([[array([119, 222, 219, 293], dtype=int32), 4],
[array([179, 124, 500, 235], dtype=int32), 7]], dtype=object)
In [105]: _.shape
Out[105]: (2, 2)
答案 2 :(得分:1)
您似乎希望单个元素是numpy数组,而不是整个数组。因此,您必须直接分配这些特定元素:
ll[0][0] = np.array(ll[0][0])
ll[0][2] = np.array(ll[0][2])
如果您不想编写单独的行,也可以遍历并找到“列表”,然后将其转换。