0

我有一个 while 语句在 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.]]

我研究了 appending 和 vstack,但无法让它在“while”语句中工作,或者可能是因为省略了结尾的“0”,它们的大小不一样!

谢谢!

4

1 回答 1

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 

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

于 2012-07-30T17:21:25.953 回答