Python 在一行中列出不同列的数组

Python 在一行中列出不同列的数组,python,arrays,list,numpy,Python,Arrays,List,Numpy,我需要将列表转换为数组。但是函数asarray没有生成所需的结果,您知道如何进行转换吗?谢谢 名单: 转换为数组: [[1,2,""], [4,5,6]] 看起来你应该手动操作 >>> s = [[1,2], [4,5,6]] >>> maxl = max(map(len, s)) >>> np.asarray([i + [-1]*(maxl-len(i)) for i in s]) array([[ 1, 2, -1],

我需要将列表转换为数组。但是函数asarray没有生成所需的结果,您知道如何进行转换吗?谢谢

名单:

转换为数组:

[[1,2,""],
[4,5,6]] 

看起来你应该手动操作

>>> s = [[1,2], [4,5,6]]
>>> maxl = max(map(len, s))
>>> np.asarray([i + [-1]*(maxl-len(i)) for i in s])
array([[ 1,  2, -1],
       [ 4,  5,  6]])

但是numpy的数组是同构的,所以数组中不能同时包含string和int;所以我使用-1作为占位符。

所需的NumPy数组必须是dtype
object
。这样的数组没有使用本机数据类型的NumPy数组的速度优势。你可能想重新调整你的目标

然而,更多的是出于游戏精神而非实用性,以下是如何创建所需阵列:

In [50]: import itertools as IT

In [51]: seq = [[1,2],[4,5,6]]

In [52]: np.array(zip(*(IT.izip_longest(*seq, fillvalue=''))), dtype='O')
Out[52]: 
array([[1, 2, ''],
       [4, 5, 6]], dtype=object)
(感谢@m.wasowski,改进了
zip而不是
列表(IT.izip(…)

@utdemir使用-1作为占位符的想法将允许您创建一个原生
int
dtype的numpy数组。使用上述代码,您只需将
fillvalue
更改为
-1

In [56]: np.array(zip(*(IT.izip_longest(*seq, fillvalue=-1))))
Out[56]: 
array([[ 1,  2, -1],
       [ 4,  5,  6]])
另一种选择是使用:

屏蔽数组允许您在正确处理缺失数据的同时执行NumPy计算。例如,可以通过以下方式找到列的平均值:

In [71]: print(arr.mean(axis=0))
[2.5 3.5 6.0]

请注意,最后一列的平均值是6,而不是3。

您需要提供更多详细信息。您要做的事情并不明显。您可以使用
import numpy
numpy.array()
但如果行大小不同,它不会添加零。
In [68]: np.ma.masked_less(zip(*(IT.izip_longest(*seq, fillvalue=-1))), 0)
Out[68]: 
masked_array(data =
 [[1 2 --]
 [4 5 6]],
             mask =
 [[False False  True]
 [False False False]],
       fill_value = 999999)
In [71]: print(arr.mean(axis=0))
[2.5 3.5 6.0]