python-模运算符理解
我偶然发现了一些代码,它以一种我以前从未见过的方式使用了模运算符。所讨论的行是python-模运算符理解,python,indexing,nlp,Python,Indexing,Nlp,我偶然发现了一些代码,它以一种我以前从未见过的方式使用了模运算符。所讨论的行是data\u index=(data\u index+1)%len(data) 我不知道这段代码在更新数据索引时试图做什么: def generate_batch(batch_size, num_skips, skip_window): global data_index assert batch_size % num_skips == 0 assert num_skips <= 2 *
data\u index=(data\u index+1)%len(data)
我不知道这段代码在更新数据索引时试图做什么:
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 ...
def生成批处理(批处理大小、跳过的数量、跳过的窗口):
全球数据索引
断言批大小%num\u跳过==0
assert num_跳过模运算符%
,具有定义良好的行为。它在除以一个数字后得到余数。它以a%b
的表达式形式使用,返回值c
该定义创建了一个有趣的属性,用于问题提供的代码中,将值“包装”到定义良好的范围中。有问题的代码在循环中使用此选项,以确保数据索引
被包装在0
到len(data)-1
的范围内。当它超出边界时,它只是继续从0追加数据[data\u 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
当你用data\u index+1
除以data
的长度时,它会找到余数。我已经提交了对你问题的编辑。将来,请提供一个让您困惑的代码列表。在这种情况下,它只是一行。开始提问时,尽可能少的代码来演示它。