将numpy多维数组转换为list

时间:2015-06-03 17:39:34

标签: python arrays list multidimensional-array

我是Python的新手。我查看了其他类似的主题,但他们没有回答我想要做的事情。结果如下:

coslist[1:4]
Out[94]: [array([[ 0.7984719]]), array([[ 0.33609957]]), 0]

这就是我想要的:

coslist=[0.7984719,0.33609957,0]

我试过了:

tolist=list(coslist)
tolist[1:3]
Out[98]: [array([[ 0.7984719]]), array([[ 0.33609957]])]

而且:

y=np.array(val).ravel().tolist()
y[1:4]
Out[99]: [array([[ 0.7984719]]), array([[ 0.33609957]]), 0]

如你所见,他们中的任何一个都是我想要的。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

有一个内置的numpy数组方法。

coslist = [numpy.array([[ 0.7984719]]), numpy.array([[ 0.33609957]]), 0]
coslist = [x.tolist()[0][0] if type(x)==numpy.ndarray else x for x in coslist]

type(coslst) # Should print <type 'list'>
lst # Should print a list of lists

答案 1 :(得分:1)

首先,您需要逐项转换列表中的np.arrays:

coslist=[np.array(item).tolist() for item in coslist]

然后我认为摆脱列表内部列表的唯一方法是通过迭代:

aux=[]
for x in coslist:
    if type(x)==list:
        for k in range(len(x[0])):
        aux.append(x[0][k])
    else:
        aux.append(x)
coslist=aux

请注意,我已经考虑过每个numpy数组中可能包含多个值。因为如果你的列表只包含每个都有一个值的np.arrays,你可以这样做:

coslist=[np.array(item).tolist() for item in coslist]
coslist=[x[0][0] if type(x)==list else x for x in coslist]

或者,如果您想特别快速回答您的问题,那就可以:

coslist=[np.mean(coslist[k]) for k in range(len(coslist))]

答案 2 :(得分:0)

多维数组: example = np.array([[1,2,3],[1,2],[1,4,5,6,7]])

  • 使用列表理解 result = [j_i for item in a for j_i in item]

  • 使用lambda并减少 import functools as ft result = ft.reduce(lambda x,y :x+y, a)

  • 使用itertools import itertools chain = itertools.chain(*a) list(chain)

参考:Flattening a shallow list in Python