python-模运算符理解

时间:2018-08-03 19:46:15

标签: python indexing nlp

我碰到了一些代码,该代码以以前从未见过的方式使用模运算符。有问题的行是data_index = (data_index + 1) % len(data)

我不知道此代码在更新data_index时会试图做什么:

def generate_batch(batch_size, num_skips, skip_window):
    global data_index
    assert batch_size % num_skips == 0
    assert num_skips <= 2 * skip_window
    batch = np.ndarray(shape=(batch_size), dtype=np.int32)
    labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32)
    span = 2 * skip_window + 1 # [ skip_window target skip_window ]
    buffer = collections.deque(maxlen=span)
    for _ in range(span):
        buffer.append(data[data_index])

        # What is this doing?
        data_index = (data_index + 1) % len(data)
# ... More stuff ...

1 个答案:

答案 0 :(得分:0)

模运算符%具有明确定义的行为。除以数字后得出余数。它以a % b的表达式形式使用,返回值c

该定义创建了一个有趣的属性,该属性用于将问题“包装”到定义明确的范围内,该属性用于您的问题提供的代码中。有问题的代码在循环中使用此代码,以确保将data_index包装在0len(data) - 1的范围内。超出范围后,它将继续从0开始附加data[data_index]

这是模数循环行为的一个例子:

for i in range(10):
    print(str(i) + ' % 3 =', i % 3)

哪些印刷品:

0 % 3 = 0
1 % 3 = 1
2 % 3 = 2
3 % 3 = 0
4 % 3 = 1
5 % 3 = 2
6 % 3 = 0
7 % 3 = 1
8 % 3 = 2
9 % 3 = 0