Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将嵌套的数据列表转换为多维Numpy数组_Python_List_Numpy_Slice - Fatal编程技术网

Python 将嵌套的数据列表转换为多维Numpy数组

Python 将嵌套的数据列表转换为多维Numpy数组,python,list,numpy,slice,Python,List,Numpy,Slice,在下面的代码中,我正在嵌套列表中构建数据。在for循环之后,我希望将其尽可能整齐地转换为多维Numpy数组。但是,当我对它进行数组转换时,它似乎只是将外部列表转换为数组。更糟糕的是,当我继续向下时,我得到的数据点是shape(100L,)…这样一个列表数组,其中每个列表都是我的数据(显然我想要一个(100,3))。我也试过愚弄numpy.asanyarray(),但我似乎无法解决这个问题。如果可能的话,我真的希望从一开始就从我的3d列表中选择一个3d阵列。如果不是,如何将列表数组转换为2d数组,

在下面的代码中,我正在嵌套列表中构建数据。在for循环之后,我希望将其尽可能整齐地转换为多维Numpy数组。但是,当我对它进行数组转换时,它似乎只是将外部列表转换为数组。更糟糕的是,当我继续向下时,我得到的数据点是shape
(100L,)
…这样一个列表数组,其中每个列表都是我的数据(显然我想要一个
(100,3)
)。我也试过愚弄
numpy.asanyarray()
,但我似乎无法解决这个问题。如果可能的话,我真的希望从一开始就从我的3d列表中选择一个3d阵列。如果不是,如何将列表数组转换为2d数组,而不必迭代和转换它们

编辑:我也愿意从一开始就采用更好的方法来组织数据,如果它能使处理变得更容易的话。但是,它是通过串行端口传输的,其大小事先不知道

import numpy as np
import time

data = []
for _i in range(100):   #build some list of lists
    d = [np.random.rand(), np.random.rand(), np.random.rand()]
    data.append([d,time.clock()])

dataArray = np.array(data)  #now I have an array of lists of a list(of data) and a time
dataPoints = dataArray[:,0] #this is the data in an array of lists

如果二维阵列是您想要的:

from itertools import chain
dataArray = np.array(list(chain(*data)),shape=(100,3))

我没有计算出代码,因此您可能必须更改列/行顺序以使形状匹配。

数据点不是二维列表。首先将其转换为二维列表,然后将其工作:

d=np.array(dataPoints.tolist())

现在,d是(100,3)正如您所希望的。

您没有3d嵌套列表,而是列表和标量的混合体。数据是一个包含如下对象的列表:[[0.434,0.34,0.22],0.2]。这是一个混合对象,所以numpy不知道如何处理它。这是原始数据对象的真实情况,这就是为什么我不确定从那里可以实现的原因。然而,dataPoints对象是一个浮点数列表数组,我似乎也无法将其放入2d数组中。如果我理解正确,它只是在每个列表上迭代并执行np.array()。我想我只是觉得有更好的方法,如果没有,我会接受的。我不确定您从何处获取形状参数。是的,数据点是一个列表数组。这确实有效,这是从for循环开始向前的最佳方式吗?我最后转换到数组(为了切片功能),回到列表(为了得到正确的形状),然后回到数组。跳过数组转换和切片。只追加d(将time.clock()保留在外,因为您稍后将对其进行切片)。这将为您提供一个列表,然后您可以将其转换为数组。或者,更好的是,首先从一个numpy数组开始,不要使用列表。我需要代码的其他部分的时间戳,我不知道数据通过串行端口流入时的大小。但是你的解决方案是我迄今为止找到的最好的。@MattAnderson为什么不把时间戳附加到数字三元组上,这样就得到了一个(100,4)数组?您希望最终数组的维数是多少?我想这太简单了。可能只是因为在我的脑海中有一段时间是一个数据,我不认为在这种情况下的时间只是另一个数据。谢谢你的帮助