我有一个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.]]
我已经研究过append和vstack,但是不能让它在“while”语句中工作,或者可能是因为它们的大小不同,因为结尾的“0”被忽略了!
谢谢!
答案 0 :(得分: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
你甚至可以添加一个检查以查看身体是否太宽并创建一个新阵列,将旧部分分配给它...但是在那时,可能需要堆叠操作。