如何从numpy ndarray制作线性数据列表?

时间:2015-04-13 17:26:32

标签: python python-2.7 numpy

我想有效地将​​ndarray转换为线性列表,以便我可以轻松地将其传递给我的boost模块,并在C中进行索引计算。

基本上我有一个n维ndarray,例如

>>> a = np.ndarray((2, 2, 2))

哪会给我

array([[[ 0,   0],
        [  0,   0]],

       [[  0,   0],
        [  0,   0]]])

然后我会做

a.serialize()
[0, 0, 0, 0, 0, 0, 0, 0]

我该怎么做?

3 个答案:

答案 0 :(得分:1)

请尝试以下方法之一:

a.flatten()a.ravel()

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel.html

答案 1 :(得分:1)

您打算做什么称为展平数组,可以通过调用flatten方法来实现。然后可以将最终结果转换为列表。您还可以使用库级函数numpy.ravel展开数组。由于它是一个库级函数,它适用于任何对象,而不仅仅是ndarray。此外,它还会根据需要创建副本,在展平的alays中创建副本。

>>> a = np.ndarray((2, 2, 2))
>>> a.flatten()
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>> list(a.flatten())
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]

答案 2 :(得分:1)

a.ravel()" unrolls"你的阵列变成了一个平坦的"版本a。 它只在必要时创建一个副本,这有点危险 - 有时,在更改值时,例如a.ravel()[4] = 3.141,您只需更改副本,有时您会更改原始文件。

如果您需要的只是一个1D访问者,请尝试a.flat,这将只是"只是"将1D指数转换为匹配的2D指数:

 a = numpy.ndarray((2,2))
 a.flat[3] = 4
 print a[1,1]
 >>>4