2012-07-30 46 views
0

我有一个产生一个数组中numpy的结合行numpy的,以一个单一的阵列

while(i<int(sp)): 
    body=(np.bincount(un[i].ravel().astype('int'), weights=step_periods[i].ravel())) 
    print(body) 
    i=i+1 

每次迭代产生像下面的一个数组,同时声明:

1st [ 0. 0. 0. 30.] 

2nd [ 0. 0. 21. 18. 15.] 

3rd [ 0. 24. 27. 0. 3.] 

我的第一个问题是,如果第一个数组的最后一个值为“0”,则它将离开数组。有没有办法把它从转换:

[ 0. 0. 0. 30.] 

到:

[ 0. 0. 0. 30. 0.] 

从那里,我想简单地每个阵列添加到主阵列,使最终输出类似的东西:

[[ 0. 0. 0. 30. 0.0], 

    [ 0. 0. 21. 18. 15.], 

    [ 0. 24. 27. 0. 3.]] 

我看着追加和vstack,但不能让它在一个“while”语句工作,或者可能是因为他们并不都是相同的尺寸,因为结束而中省略“0” !

谢谢!

+1

这将有助于显示产生这些子阵列的'while'循环。 – mgilson 2012-07-30 16:45:52

+0

您应该将其作为该帖子的修改发布。把它放在评论中很难说出发生了什么。 – mgilson 2012-07-30 17:04:41

+0

对不起,我现在就这样做,我是新来的这些论坛!我感谢帮助! – 2012-07-30 17:07:33

回答

1

一个解决办法 - 如果你能保证的body长度总是小于(或等于)5,你可以预先分配数组:

import numpy as np 
my_array = np.zeros((int(sp)-i,5),dtype=int) 
for ii in range(i,int(sp)): 
    body=(np.bincount(un[i].ravel().astype('int'), weights=step_periods[i].ravel())) 
    my_array[ii,:len(body)]=body 

你甚至可以添加检查身体是否太宽,并创建一个新的数组,将旧部分分配给它......但是在那时,可能需要堆叠操作。

+0

你能解释一下吗?和我得到的错误“操作数不能与形状(3)(4)” – 2012-07-30 17:44:13

+0

看看np.zeros我认为应该切换5和int(sp)-i。但是当我切换它时,我切换后得到错误 “无效索引” – 2012-07-30 17:47:22

+0

,我意识到我的i = i + 1没有缩进!谢谢! :)它完美的作品! – 2012-07-30 18:00:00