我想有效地将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]
我该怎么做?
答案 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