将numpy多维数组转换为列表

4

我对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]])]

And this:

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

看到了吗,这些都不是我想要的。任何帮助都将不胜感激。


1
你的collist是一个填充有2D数组和数字值的列表,这很难处理。你确定没有办法构建这个列表,只存储在2D数组中的值,而不是整个2D数组吗?如果不行,也许使用纯Python循环来提取值是可行的方法。 - Akavall
你在创建这个列表时出了问题。解决你的问题不仅仅是某种后处理步骤;你需要修复创建它的代码,否则你将会在未来遇到更多麻烦。 - user2357112
3个回答

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

我遇到了一个错误,当我运行它时。这可能是因为costliest不是一个坑状的ndarray,而是一个numpy ndarray列表。我完全卡住了。 - Denis
在这种情况下,发布一个小例子,其中您将值放入coslist中。保持数组较小。 - Aditya
这是列表的前三个元素: coslist[1:4] Out[94]: [array([[ 0.7984719]]), array([[ 0.33609957]]), 0] - Denis
检查coslist = [x.tolist()[0] [0] if type(x)== numpy.ndarray else x for x in coslist]。告诉我它是否有效。如果实际数组比示例更复杂,则可能会失败。 - Aditya

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.array,则可以执行以下操作:
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))]

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和reduce import functools as ft result = ft.reduce(lambda x,y :x+y, a)

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

参考资料:在Python中展开一个浅层列表


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接