我正在尝试使用多个范围来排序数据。假设tt数组中有一些数据:
n= 50
b = 20
r = 3
tt = np.array([[[3]*r]*b]*n)
以及列表中的其他值:
z = (np.arange(0,5,0.1)).tolist()
现在我需要根据z的范围对tt中的数据进行排序,z应该在0和1之间,下一个范围在1和2之间,下一个范围在2和3之间,依此类推。 我现在的尝试是创建每个范围的长度数组,并使用这些长度从tt中剪切数据。看起来像这样:
za = []
za2 = []
za3 = []
za4 = []
za5 = []
za6 = []
za7 = []
for y in range(50):
if 0 <= int(z[y]) < 1:
za.append(z[y])
zi = array([int(len(za))])
if 1 <= int(z[y]) < 2:
za2.append(z[y])
zi2 = array([int(len(za2))])
if 2 <= int(z[y]) < 3:
za3.append(z[y])
zi3 = array([int(len(za3))])
if 3 <= int(z[y]) < 4:
za4.append(z[y])
zi4 = array([int(len(za4))])
if 4 <= int(z[y]) < 5:
za5.append(z[y])
zi5 = array([int(len(za5))])
if 5 <= int(z[y]) < 6:
za6.append(z[y])
zi6 = array([int(len(za6))])
if 6 <= int(z[y]) < 7:
za7.append(z[y])
zi7 = array([int(len(za7))])
till = np.concatenate((np.array(zi), np.array(zi2), np.array(zi3), np.array(zi4), np.array(zi5), np.array(zi6), np.array(zi7))
ttn = []
for p in range(50):
#if hour_lenght[p] != []
tt_h = np.empty(shape(tt[0:till[p],:,:]))
tt_h[:] = np.nan
tt_h = tt_h[np.newaxis,:,:,:]
tt_h[np.newaxis,:,:,:] = tt[0:till[p],:,:]
ttn.append(tt_h)
您可以猜到,我得到一个错误“name'zi6'is not defined”,因为在该范围内没有数据。但至少它对确实存在的部分起到了作用:D。但是,如果我在if之后包含else语句,并执行如下操作:
for y in range(50):
if 0 <= int(z[y]) < 1:
za.append(z[y])
zi = np.array([int(len(za))])
else:
zi = np.array([np.nan])
我第一部分的第一个zi被nan覆盖了
我还应该指出,最终目标是加载多个与tt形状相似的文件(最后两个维度总是相同的,而第一个维度是变化的,例如:
tt.shape
(50, 20, 3)
其他一些tt2的形状是:
tt2.shape
(55, 20, 3)
z2的值在5到9之间
z2 = (np.arange(5,9,0.1)).tolist()
所以最后我应该得到数组ttn where
ttn[0]由范围在0到1之间的tt值填充
ttn[1]应该用tt中介于1和2之间的值填充,以此类推
我非常感谢关于这个问题的建议和可能的解决办法
目前没有回答
相关问题 更多 >
编程相关推荐