Python:Flatten ndarray

时间:2016-01-06 21:09:38

标签: python numpy

我继承了一些python代码,它有一个ndarray,看起来像:

>>> ARCoeff
Out[6]: array([array([[ 1.16179327, -0.1721163 ]])], dtype=object)

>>> ARCoeff.dtype
Out[7]: dtype('O')

>>> ARCoeff.shape
Out[8]: (1,)

>>> type( ARCoeff )
Out[2]: numpy.ndarray

如何将数组提取到

之类的内容
[ 1.16179327, -0.1721163 ]

编辑:

根据提供的建议,这就是我得到的:

>>> z = ARCoeff.flatten().tolist()

>>> z[0]
Out[19]: array([[ 1.16179327, -0.1721163 ]])

>>> z1 = z[0]

>>> type(z1)
Out[21]: numpy.ndarray

所以,我回到了一个ndarray。

EDIT2:

>>> np.version.version
Out[31]: '1.8.0'

EDIT3:

>>> z = ARCoeff.flatten().flatten().tolist()
>>> type(z)
Out[38]: list
>>> z1 = z[0]
>>> type(z1)
Out[40]: numpy.ndarray

我可以知道为什么我的问题被否决了吗?我是Python的新手,所以请耐心等待。

3 个答案:

答案 0 :(得分:5)

要重现OP的显示,我必须使用:

In [83]: x=np.zeros((1,),dtype=object)    
In [84]: x[0]=np.array([[ 1.16179327, -0.1721163 ]])
In [85]: x
Out[85]: array([array([[ 1.16179327, -0.1721163 ]])], dtype=object)

这与

不同
In [75]: a = np.array([np.array([[ 1.16179327, -0.1721163 ]])], dtype=object)

In [76]: a
Out[76]: array([[[1.16179327, -0.1721163]]], dtype=object)

In [78]: a.shape
Out[78]: (1, 1, 2)

np.array尝试将其输入转换为高维数组,并删除大多数嵌套数组的证据。

从名称来看,我猜这个数组来自一个名为ARC的库 - 我相信它是一个映射库。

在任何情况下,我们都可以通过索引来拉出内部数组:

In [86]: x[0]
Out[86]: array([[ 1.16179327, -0.1721163 ]])

现在这是一个简单的二维数组,可以展平或平整,或重塑:

In [87]: x[0].flatten()
Out[87]: array([ 1.16179327, -0.1721163 ])

flatten对原x没有任何作用,因为已经是1d。

我在MATLAB文档中找到了ARCoeff

http://www.mathworks.com/help/econ/modify-regarima-model-properties.html

对象数组中的2d数组是scipy加载MATLAB文件的特征。

在Octave,我可以做到

octave:11> ARCoeff={[1,2,3]};
octave:12> save -7 test.mat ARCoeff

并在IPython中使用scipy.io.loadmat

加载文件
In [99]: from scipy.io import loadmat

In [100]: M=loadmat('test.mat')

In [101]: M['ARCoeff']
Out[101]: array([[array([[ 1.,  2.,  3.]])]], dtype=object)

答案 1 :(得分:3)

<context:annotation-config></context:annotation-config> <context:component-scan base-package="controller, dao, model, service, main, configuration"> </context:component-scan> <mvc:annotation-driven></mvc:annotation-driven> <mvc:default-servlet-handler /> <tx:annotation-driven /> 就是出于此目的。

ndarray.flatten

>>> import numpy as np
>>> a = np.array([np.array([[ 1.16179327, -0.1721163 ]])], dtype=object)
>>> a.flatten()
array([1.16179327, -0.1721163], dtype=object)

答案 2 :(得分:1)

您是否尝试过内置的.tolist()方法?

>>> RCoeff.tolist()