2017-08-17 195 views
0

我有一个非常愚蠢的问题,但由于某种原因,我只是不知道该怎么做。我有一个多维numpy的数组,即应具有以下形状:Python压扁数组内部numpy数组

(345138,30,300)

但是,它实际上具有这样的形状:

(345138,1)

1元件阵列内是包含形状

(30,300)

所以阵列我如何“移动”的内部阵列,使得SHA pe是正确的?

目前,它看起来像这样:

[[ array([[0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0]], dtype=int32)] 
[ array([[0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 

,但我想这没有数组(...),D类= 32和移动是什么在那里进入第一阵列,这样的形状(345138,30,300),看起来像这样:

[[ [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0]], 
[ [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    [0, 0, 0, ..., 0, 0, 0], 
    ..., 

任何想法?

+0

您是否尝试过'.tolist()'了吗? –

+0

尝试:'np.array(x)',如果形状兼容,它们将被压扁。 –

+0

hmmm不,不幸的是,这并没有改变任何一个单元阵列破坏了所有的东西 – SirTobi

回答

2

看起来像你有一个2d数组,包含2d数组(object dtype)。我可以构建一个这样的搭配:

In [972]: arr = np.empty(4,dtype=object) 
In [973]: arr = np.empty((4,1),dtype=object) 
In [974]: for i in range(4): arr[i,0]=np.ones((2,3),int) 
In [975]: arr 
Out[975]: 
array([[array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])]], dtype=object) 

简单包装,在np.array不起作用;不不施加tolist

In [976]: np.array(arr) 
Out[976]: 
array([[array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])], 
     [array([[1, 1, 1], 
     [1, 1, 1]])]], dtype=object) 
In [977]: arr.tolist() 
Out[977]: 
[[array([[1, 1, 1], 
     [1, 1, 1]])], [array([[1, 1, 1], 
     [1, 1, 1]])], [array([[1, 1, 1], 
     [1, 1, 1]])], [array([[1, 1, 1], 
     [1, 1, 1]])]] 

单程“平坦化”的是使用一些版本的concatenate

In [978]: np.stack(arr.ravel()) 
Out[978]: 
array([[[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]]]) 
In [979]: _.shape 
Out[979]: (4, 2, 3) 

我用ravel减少外阵列到1d,其stack可以作为使用名单。 stack的作用类似于np.array,因为它将新元素(我们可以指定)组合起来。


tolistarray能够共同努力:

In [981]: np.array(arr.tolist()) 
Out[981]: 
array([[[[1, 1, 1], 
     [1, 1, 1]]], 

     [[[1, 1, 1], 
     [1, 1, 1]]], 


     [[[1, 1, 1], 
     [1, 1, 1]]], 


     [[[1, 1, 1], 
     [1, 1, 1]]]]) 
In [982]: _.shape 
Out[982]: (4, 1, 2, 3) 

或者tolistsqueeze(实际上是np.asarray(...).squeeze()

In [983]: np.squeeze(arr.tolist()) 
Out[983]: 
array([[[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]], 

     [[1, 1, 1], 
     [1, 1, 1]]]) 
In [984]: _.shape 
Out[984]: (4, 2, 3) 
+0

嗨,非常感谢,这工作!它也崩溃了我的电脑,但:D 你太棒了! – SirTobi