我碰到了一些代码,它们以一种我以前从未见过的方式使用了模运算符。问题所在的行是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 ...
发布于 2018-08-04 04:25:34
模运算符%
具有定义良好的行为。它产生除以一个数字后的余数。它以返回值c
的a % b
表达式形式使用
该定义创建了一个有趣的属性,用于问题提供的代码中,将值“包装”到一个定义良好的范围中。有问题的代码在一个循环中使用它,以确保data_index
被包装在0
到len(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
https://stackoverflow.com/questions/51679228
复制相似问题