是否可以将范围以不同的方式放入for循环中?

时间:2019-01-09 13:08:49

标签: python

我有一个包含610个数据样本的数据集,其标记数字从1到610。

因此,我为范围(1,610)中的i进行了迭代:

但是在286次迭代之后,它由于缺少数据样本287而被停止。 然后我再次手动查看所有数据,然后我知道缺少数据样本编号287,291,292。

但是我想通过for循环加载并运行数据样本。

有没有可能的解决方案?

先谢谢了。

for i in range(1,610):    
    trueData = np.load(path_load + 'featureMatrixTrue_of_K1_%d.npy' % i)

    output = []
    for c in range(2,6):

        interp = scipy.interpolate.griddata((trueData[:,0],trueData[:,1]), trueData[:,c], (X.flatten(),Y.flatten()))   
        interp = interp.reshape(num_points, -1)  
        if c==5:
            interp = np.logical_and(np.where(interp < 0.92,0,1), np.where(interp > 1.06,0,1))
            #interp = interp.astype(int)
        output.append(interp)
    output = np.array(output)

2 个答案:

答案 0 :(得分:1)

您应该优雅地允许for循环在缺少数据的情况下继续运行,而不是对287、291和292的跳转进行硬编码。另外,如果您的索引从1到610(含)范围应为range(1,611)

data = {1:'lorum', 2:'ipsum', 4: 'dolor'}

for i in range(1, 5):
    try:
        print(data[i])
    except KeyError:
        print('Data missing at',i)

输出:

lorum
ipsum
Data missing at 3
dolor

答案 1 :(得分:0)

您可以先尝试检查文件是否首先存在,然后再尝试加载它。 os.path应该对您有帮助,特别是isfile()

import os.path

for i in range(1,610):
    data_set_path = path_load + 'featureMatrixTrue_of_K1_%d.npy' % i
    # Check if file does not exist,
    # if its missing we proceed to the next value of i
    if not os.path.isfile(data_set_path):
        continue
    trueData = np.load(data_set_path)

    output = []
    for c in range(2,6):

        interp = scipy.interpolate.griddata((trueData[:,0],trueData[:,1]), trueData[:,c], (X.flatten(),Y.flatten()))   
        interp = interp.reshape(num_points, -1)  
        if c==5:
            interp = np.logical_and(np.where(interp < 0.92,0,1), np.where(interp > 1.06,0,1))
            #interp = interp.astype(int)
        output.append(interp)
    output = np.array(output)