我正在尝试使用多个范围订购数据。假设我在tt数组中有一些数据:
n= 50
b = 20
r = 3
tt = np.array([[[3]*r]*b]*n)
和列表中的另一个值:
z = (np.arange(0,5,0.1)).tolist()
现在,我需要根据z的范围对tt的数据进行排序,该范围应介于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)
您可以猜到,由于该范围内没有数据,因此出现错误“未定义名称'zi6'”。但是至少它确实对存在的部分起作用: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])
我从第1部分开始的初始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 wheres
结尾ttn [0]填充了tt中介于0到1之间的值
ttn [1]应该用tt中介于1和2之间的值填充,依此类推。
我非常感谢有关此问题的建议和可能的解决方案。