不明白当j是元组时,这个示例onehot代码如何用[i,j]索引numpy数组?

2024-04-25 04:56:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白行:results[i, sequence] = 1在下面的代码中是如何工作的。你知道吗

我在Manning的一本书《用Python深入学习》(示例3.5-movie)中用一些示例代码跟随调试器-评论.ipynb虽然我理解了代码的功能,但我不知道它的语法和工作原理。我正在尝试将Python和deeplearning结合起来学习,并希望理解代码在做什么。你知道吗

def vectorize_sequences(sequences, dimension=10000):
    # Create an all-zero matrix of shape (len(sequences), dimension)
    results = np.zeros((len(sequences), dimension))
    for i, sequence in enumerate(sequences):
        results[i, sequence] = 1.  # <--- How does this work?
    return results
  • 这将创建results,一个25000x1000的零数组。你知道吗
  • sequences是元组列表,例如(3,0,5)。然后它遍历sequences,对于每个序列的每个非零值,将results[i]中相应的索引设置为1.0。他们称之为热编码。
  • 我不明白这行是怎么写的:results[i, sequence] = 1 在numpy中完成此操作。
  • 我得到了for i, sequence in enumerate(sequences)部分:只需枚举sequences列表并跟踪i。你知道吗
  • 我猜有某种numpy魔法,它是在逐元素检查sequence[n]并在sequence[n]非零时插入1.0(?)只是想了解语法。你知道吗

Tags: 代码innumpy示例列表forlen语法
2条回答

所以我要做一些假设,因为你们没有提供序列或维度的例子。我假设dimension是sequences中可能的最高值+1,sequences中的每个值要么是一个整数,要么是一个tuple整数。你知道吗

这将遍历每个序列,并将i'th行中的所有值设置为1.0,其中标记位于sequence。你知道吗

# Create an all-zero matrix of shape (len(sequences), dimension)
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
    results[i, sequence] = 1.  # How does this work?
return results

因此,通过这些输入:

import numpy as np
sequences = [(2, 3), (2, 1), 4]
dimension = 5 # max value is 4, +1 is 5
results = np.zeros((len(sequences), dimension))
print(results)
#[[0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]
# [0. 0. 0. 0. 0.]]
for i, sequence in enumerate(sequences):
     results[i, sequence] = 1.0
print(results)
#[[0. 0. 1. 1. 0.]
# [0. 1. 1. 0. 0.]
# [0. 0. 0. 0. 1.]]

对于第一个序列(2, 3),它用1.0替换数组中的第3和第4项

对于第二个序列(1, 2),它用1.0替换数组中的第二和第三项

在最后一个序列中,41.0替换了第5项

假设sequence是一个整数列表

results[i,sequence] = 1

相当于

for j in sequence:
    results[i][j] = 1

相关问题 更多 >