【问题标题】:Converting a numpy multidimensional array to list将 numpy 多维数组转换为列表
【发布时间】:2015-08-18 01:46:08
【问题描述】:

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

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

【问题讨论】:

  • 您的collist 是一个包含二维数组和数值的列表,很难使用。您确定没有办法构建这个列表,其中只有存储在二维数组中的值,而不是二维数组吗?如果不只是简单的 python 循环,您可以在其中提取值。
  • 你搞砸了你创建这个列表的过程。解决问题的正确方法不仅仅是某种后处理步骤;你需要修复创建它的代码,否则你会更加头疼。

标签: python arrays list multidimensional-array


【解决方案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 的列表。我完全被卡住了
  • 在这种情况下,发布一个小示例,将值放入 coslist。保持数组小。
  • 这是列表的前三个元素:coslist[1:4] Out[94]: [array([[ 0.7984719]]), array([[ 0.33609957]]), 0]
  • 检查 coslist = [x.tolist()[0][0] if type(x)==numpy.ndarray else x for x in coslist] 。告诉我它是否有效。如果实际数组比示例更复杂,则可能会失败。
【解决方案2】:

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

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

那么我认为摆脱list inside list inside list的唯一方法是通过迭代:

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

【讨论】:

    【解决方案3】:

    多维数组: 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2012-11-24
      • 2017-03-09
      • 2011-12-04
      • 2018-02-26
      • 2014-11-14
      相关资源
      最近更新 更多