Python的下标从0开始,那么当我们不想把初项放到递推的数组中的时候,我们可以使用负下标来方便地初始化。比如设f(x)=f(x-1)+something,我们就可以写

a = np.zeros(N)
a[-1] = some_initial_value
for i in range(N)
a[i]=f(a[i-1]) + something

这样就避免了单独对a[0]进行初始化。

但是这样有一个危险:因为a[-1]实际上是a的最后一个值,所以如果你需要把每次运算时候的a给记住的话,当你计算到最后一个值的时候记忆的a[-1]会被改掉。例如,

def f(x):
#return value is x**2, cache is x
return x**2, x

def __main__:
a[-1] = some_initial_value
cache = []
for i in range(N):
a[i], cache_now = f(a[i-1])
cache.append(cache_now)

如果这么写的话,那么你希望的cache[0] = a[-1] = some_initial_value,但是计算到最后一个a的时候,a[-1]会被改成a[N-1],这样你的输出a[N-1]是正确的,查不出错误;但是你的cache[0]也同样被改掉了。这样,当你需要cache的时候,最后一个cache就会出问题。

这个问题在神经网络的反向传播里面特别容易犯错,当前向传播完全正确,但是反向传播却总是莫名其妙地出错,还总是只错一个参数的时候,检查一下是不是这里出问题了。

更多相关文章

  1. 彻底理解初始化参数SERVICE_NAMES和客户端TNS中的SERVICE_NAME
  2. identity_insert和表初始化脚本
  3. 下标越界: '[number: 0]'
  4. 【Linux】Mysql初始化root密码和允许远程访问
  5. Java类的初始化顺序
  6. JAVA-初步认识-第十章-对象的初始化过程
  7. 给定一个整数数组,找出两个下标,要求后面下标所指的数减去前面下标
  8. Java虚拟机:类的初始化
  9. java的数组下标的非常严重的问题,异常不爽

随机推荐

  1. 如何使用print实现不换行打印
  2. 刺激!一行代码即可导出所有浏览记录
  3. 如何用Python快速优雅的批量修改Word文档
  4. 爬虫遇到头疼的验证码?Python实战讲解弹窗
  5. 提高内存使用效能的技巧
  6. 爬取B站20万+条弹幕,我学会了如何成为B站
  7. 原理+代码|手把手教你使用Python实战反欺
  8. 用Python打造一款文件搜索工具,所有功能自
  9. 老板让我从几百个Excel中查找数据,我用Pyt
  10. 可视化工具不知道怎么选?深度评测5大Pytho