2014-09-24 101 views
0

我有一个熊猫系列每个条目都有一个numpy数组(每个条目的长度相同),我想将其转换为2D numpy数组。我相信我已经读过Series和DataFrames在装容器时表现不佳,但长话短说,很不幸,你从一系列的每个组调用np.histogram(.,.)[0]得到的结果,这是我所追求的(分发直方图)。Unnesting Numpy Arrays

无论哪种方式,我想从我的系列中检索2D numpy数组。目前,如果我做my_series.values()我得到这个:

array([array([0, 0, 0, ..., 1, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]), 
     array([0, 0, 0, ..., 0, 0, 0]), ..., array([0, 0, 0, ..., 0, 0, 0]), 
     array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0])], dtype=object) 

this thread该解决方案并没有在这里工作(np.array没有自动解决最终的数据结构为一个二维数组)。

如何从这个数据结构“展平”这个二维数组? (注意:result.flatten()不会做的伎俩,也没有np.array(result),都返回原来的结构)

+0

所有的子阵列都有相同的形状? – hpaulj 2014-09-24 19:24:59

回答

4

使用np.vstack以层叠列表/阵列/不管行:

>>> A = np.empty(2, dtype=object) 
>>> A[0] = array([0, 0, 0]) 
>>> A[1] = array([1, 2, 3]) 
>>> A 
array([array([0, 0, 0]), array([1, 2, 3])], dtype=object) 
>>> np.vstack(A) 
array([[0, 0, 0], 
     [1, 2, 3]]) 
+1

令人惊讶的是,@ behzad.nouri的删除解决方案比NumPy 1.8.2中的np.arange(10)的长度为2000的阵列要快。 Behzad,如果你取消退出,我会赞成。 (虽然我的解决方案赢得内部数组较大,但是。) – 2014-09-24 13:48:55

+1

未删除,但我认为'np.vstack'更清洁 – 2014-09-24 14:18:37

2

可能:

>>> xs 
array([array([1, 2, 3]), array([4, 5, 6])], dtype=object) 
>>> xs.shape 
(2,) 
>>> np.array(xs.tolist()) # or, np.asarray(xs.tolist()) 
array([[1, 2, 3], 
     [4, 5, 6]]) 
>>> np.array(xs.tolist()).shape 
(2, 3)