订单数据取决于多个范围标准

时间:2019-03-17 02:40:29

标签: python python-3.x python-2.7 numpy

我正在尝试使用多个范围订购数据。假设我在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之间的值填充,依此类推。

我非常感谢有关此问题的建议和可能的解决方案。

0 个答案:

没有答案