如何追加数组以避免超出范围的索引?

时间:2019-06-11 13:54:41

标签: python numpy-ndarray

我目前正在尝试模拟调度问题。每天都有许多人到医院打电话要求预约。在每天结束时,都会为到达者分配一个时隙。最初,我构造了一个每天到达的数组和一个代表每天时隙数的数组。循环遍历每一天的到达时间,将到达时间分配到最近的时隙。但是,当到达次数相对较高时,代码将尝试将到达次数分配给超出服务器阵列末尾的时隙,即,它所引用的索引大于服务器阵列。每当模型尝试在将来服务器阵列当前包含的时间范围内将到达时间分配给某个时隙时,是否有任何方法自动附加阵列?

到目前为止,我首先生成了一个到达数组(a),并将服务器数组设置为等于到达率大小的两倍。只要没有选择任何极值(高Labda或低mu),此方法就可以正常工作,但我希望创建更健壮的s。我个人认为,最简单的方法是添加s。

def simple_model_test():

    labda, mu, Days = 10, 4, 10
    a = poisson(labda).rvs(Days)            # Generate array with number of arrivals each day
    s = np.ones_like(a) * mu                # Generate equal sizes array with time slots
    s = np.append(s, np.ones_like(a) * mu)  # Add some additional days at the end of time horizon

    for i in range(0, len(a)):              # Cycle through all days of time horizon
        j = i + 1                           # Patients cannot be served at day of arrival
        # if s[j] is empty:                   # I was trying to do something like this, but this does not work
           # s = np.append(s, mu)
        while a[i] > 0:                     # Assign all patients that arrived to a time slot
            if s[j] > 0:                    # Check if time slots are available at day j
                a[i] -= 1                   # To indicate that a patient is assigned
                s[j] -= 1                   # To indicate that a time slot is filled at day j
            else:
                j += 1                      # Check for free time slots next day
    print(s)

simple_model_test()

因此,当前它给出错误:“ IndexError:索引20超出尺寸20的轴0的范围”。所以我想在s [j]不存在时追加s。

1 个答案:

答案 0 :(得分:0)

我发现自己是一个简单的解决方案(不知道为什么我之前没有想到这一点):

async

我将这段代码放在了while循环中。