返回介绍

01. Python 工具

02. Python 基础

03. Numpy

04. Scipy

05. Python 进阶

06. Matplotlib

07. 使用其他语言进行扩展

08. 面向对象编程

09. Theano 基础

10. 有趣的第三方模块

11. 有用的工具

12. Pandas

Theano tensor 模块:索引

发布于 2022-09-03 20:46:15 字数 2864 浏览 0 评论 0 收藏 0

In [1]:

import theano
import theano.tensor as T
import numpy as np
Using gpu device 1: Tesla C2075 (CNMeM is disabled)

简单索引

tensor 模块完全支持 numpy 中的简单索引:

In [2]:

t = T.arange(9)

print t[1::2].eval()
[1 3 5 7]

numpy 结果:

In [3]:

n = np.arange(9)

print n[1::2]
[1 3 5 7]

mask 索引

tensor 模块虽然支持简单索引,但并不支持 mask 索引,例如这样的做法是错误的:

In [4]:

t = T.arange(9).reshape((3,3))

print t[t > 4].eval()
[[[0 1 2]
  [0 1 2]
  [0 1 2]]

 [[0 1 2]
  [0 1 2]
  [3 4 5]]

 [[3 4 5]
  [3 4 5]
  [3 4 5]]]

numpy 中的结果:

In [5]:

n = np.arange(9).reshape((3,3))

print n[n > 4]
[5 6 7 8]

要想像 numpy 一样得到正确结果,我们需要使用这样的方法:

In [6]:

print t[(t > 4).nonzero()].eval()
[5 6 7 8]

使用索引进行赋值

tensor 模块不支持直接使用索引赋值,例如 a[5] = b, a[5]+=b 等是不允许的。

不过可以考虑用 set_subtensorinc_subtensor 来实现类似的功能:

T.set_subtensor(x, y)

实现类似 r[10:] = 5 的功能:

In [7]:

r = T.vector()

new_r = T.set_subtensor(r[10:], 5)

T.inc_subtensor(x, y)

实现类似 r[10:] += 5 的功能:

In [8]:

r = T.vector()

new_r = T.inc_subtensor(r[10:], 5)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文