基于多重范围标准的数据排序

2024-05-13 21:25:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我非常感谢关于这个问题的建议和可能的解决办法


Tags: 数据lenifnp数组arrayinttt