6

在下面的代码中,我在嵌套列表中构建数据。在 for 循环之后,我希望将它尽可能整齐地转换为多维 Numpy 数组。但是,当我对其进行数组转换时,它似乎只是将外部列表转换为数组。更糟糕的是,当我继续向下时,我会以 dataPoints 作为形状(100L,)......所以一个列表数组,其中每个列表都是我的数据(显然我想要一个(100,3))。我也尝试过愚弄,numpy.asanyarray()但我似乎无法解决。如果可能的话,我真的很想从一开始就从我的 3d 列表中获得一个 3d 数组。如果没有,我怎样才能将列表数组转换为二维数组,而无需迭代并全部转换?

编辑:如果它使处理更容易,我也愿意从一开始就更好地构建数据。但是,它是通过串行端口传输的,并且事先不知道其大小。

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
4

2 回答 2

8

dataPoints 不是二维列表。首先将其转换为二维列表,然后它将起作用:

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

现在 d 是 (100,3) 如您所愿。

于 2012-12-06T15:55:05.177 回答
-1

如果你想要一个二维数组:

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

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

于 2012-12-06T15:50:20.317 回答