Python列表表示法,Numpy数组表示法:predictions[predictions < 1e-10] = 1e-10。

5

我试图找出应用于列表的操作。 我有一个名为predictions的列表/数组,并执行以下一组指令。

predictions[predictions < 1e-10] = 1e-10

这段代码摘自Udacity的机器学习作业,使用了Numpy。

它被用于以下方式:

def logprob(predictions, labels):
    """Log-probability of the true labels in a predicted batch."""
    predictions[predictions < 1e-10] = 1e-10
    return np.sum(np.multiply(labels, -np.log(predictions))) / labels.shape[0]

正如@MosesKoledoye和其他人指出的那样,它实际上是一个Numpy数组。(Numpy是一个Python库)

这行代码是干什么用的?


7
很可能不是一个列表,而是一个NumPy数组。 - Moses Koledoye
2
只是为了明确predictions的真正含义:请提供一个代码片段,展示如何定义predictions并提供type(predictions)的输出。 - albert
1
请在问题正文中澄清 predictions 是标准的 Python 列表、Numpy 数组还是其他类型的数据结构。 - PM 2Ring
@MosesKoledoye 是正确的。感谢您的回答。 - Taivanbat Badamdorj
提议的重复问题,https://dev59.com/sloV5IYBdhLWcg3wJ8LD,聚焦于Python列表的可能含义。但是从上下文和被接受的答案中可以清楚地看出,这是一个“numpy”数组。那个问题对于交叉参考很有用,但并不是一个重复问题。 - hpaulj
2个回答

4
正如 @MosesKoledoye 所指出的那样,predictions 很可能是一个 numpy 数组。
然后使用 predictions < 1e-10 生成布尔数组。在该条件设置的所有索引处,如果布尔数组为 True,则值将更改为 1e-10,即 10-10
例如:
  >>> a = np.array([1,2,3,4,5]) #define array
  >>> a < 3 #define boolean array through condition
  array([ True,  True, False, False, False], dtype=bool)

  >>> a[a<3]  #select elements using boolean array
  array([1, 2])

  >>> a[a<3] = -1  #change value of elements which fit condition
  >>> a 
  array([-1, -1,  3,  4,  5])

代码中可能出现这种情况的原因是为了防止除以零或避免负数对结果造成影响,而改为插入一个非常小的数。


1
所有满足条件 (element < 1e-10) 的数组元素都被设置为 1e-10。实际上,您正在设置一个最小值。

这不是将会发生的事情。你在括号中将一个列表与一个浮点数进行比较,这会导致类型错误 =/ - HolyDanna
1
@HolyDanna 这将适用于 numpy 数组,而不是普通列表。 - jonrsharpe
@jonrsharpe 这个问题说predictions是一个列表,而不是一个数组。 - HolyDanna
@HolyDanna,虽然它确实这样说,但很可能是不正确的。如果它是一个列表,答案确实是会导致TypeError,但在那种情况下,我怀疑OP会问这个问题。 - jonrsharpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接