01. Python 工具
02. Python 基础
03. Numpy
- Numpy 简介
- Matplotlib 基础
- Numpy 数组及其索引
- 数组类型
- 数组方法
- 数组排序
- 数组形状
- 对角线
- 数组与字符串的转换
- 数组属性方法总结
- 生成数组的函数
- 矩阵
- 一般函数
- 向量化函数
- 二元运算
- ufunc 对象
- choose 函数实现条件筛选
- 数组广播机制
- 数组读写
- 结构化数组
- 记录数组
- 内存映射
- 从 Matlab 到 Numpy
04. Scipy
05. Python 进阶
- sys 模块简介
- 与操作系统进行交互:os 模块
- CSV 文件和 csv 模块
- 正则表达式和 re 模块
- datetime 模块
- SQL 数据库
- 对象关系映射
- 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- 迭代器
- 生成器
- with 语句和上下文管理器
- 修饰符
- 修饰符的使用
- operator, functools, itertools, toolz, fn, funcy 模块
- 作用域
- 动态编译
06. Matplotlib
- Pyplot 教程
- 使用 style 来配置 pyplot 风格
- 处理文本(基础)
- 处理文本(数学表达式)
- 图像基础
- 注释
- 标签
- figures, subplots, axes 和 ticks 对象
- 不要迷信默认设置
- 各种绘图实例
07. 使用其他语言进行扩展
- 简介
- Python 扩展模块
- Cython:Cython 基础,将源代码转换成扩展模块
- Cython:Cython 语法,调用其他C库
- Cython:class 和 cdef class,使用 C++
- Cython:Typed memoryviews
- 生成编译注释
- ctypes
08. 面向对象编程
09. Theano 基础
- Theano 简介及其安装
- Theano 基础
- Theano 在 Windows 上的配置
- Theano 符号图结构
- Theano 配置和编译模式
- Theano 条件语句
- Theano 循环:scan(详解)
- Theano 实例:线性回归
- Theano 实例:Logistic 回归
- Theano 实例:Softmax 回归
- Theano 实例:人工神经网络
- Theano 随机数流变量
- Theano 实例:更复杂的网络
- Theano 实例:卷积神经网络
- Theano tensor 模块:基础
- Theano tensor 模块:索引
- Theano tensor 模块:操作符和逐元素操作
- Theano tensor 模块:nnet 子模块
- Theano tensor 模块:conv 子模块
10. 有趣的第三方模块
11. 有用的工具
- pprint 模块:打印 Python 对象
- pickle, cPickle 模块:序列化 Python 对象
- json 模块:处理 JSON 数据
- glob 模块:文件模式匹配
- shutil 模块:高级文件操作
- gzip, zipfile, tarfile 模块:处理压缩文件
- logging 模块:记录日志
- string 模块:字符串处理
- collections 模块:更多数据结构
- requests 模块:HTTP for Human
12. Pandas
Theano tensor 模块:基础
张量是向量在数学上的一种推广,具体内容可以参考维基百科: https://en.wikipedia.org/wiki/Tensor
在 Theano 中有一个专门处理张量变量的模块:theano.tensor
(以下简称 T
)。
In [1]:
import theano
import theano.tensor as T
Using gpu device 1: Tesla C2075 (CNMeM is disabled)
构造符号变量
可以用 tensor
模块创造符号变量:
In [2]:
x = T.fmatrix()
print type(x)
print type(T.fmatrix)
<class 'theano.tensor.var.TensorVariable'>
<class 'theano.tensor.type.TensorType'>
从上面可以看到,T.fmatrix()
创造出的是一个 TensorVariable
类,而 T.fmatrix
本身是一个 TensorType
类。
除了使用 fmatrix
,我们还可以通过指定 matrix
的 dtype
参数来定义,例如下面的三种方式都是产生一个 int32
型的标量:
In [3]:
x = T.scalar('myvar', dtype='int32')
x = T.iscalar('myvar')
x = T.TensorType(dtype='int32', broadcastable=())('myvar')
常用的构造函数有:
T.scalar(name=None, dtype=config.floatX)
T.vector(name=None, dtype=config.floatX)
T.row(name=None, dtype=config.floatX)
T.col(name=None, dtype=config.floatX)
T.matrix(name=None, dtype=config.floatX)
T.tensor3(name=None, dtype=config.floatX)
T.tensor4(name=None, dtype=config.floatX)
还可以使用一个构造多个变量:
T.scalars
T.vectors
T.rows
T.cols
T.matrices
除此之外,我们还可以用 TensorType
类自定义的符号变量:
T.TensorType(dtype, broadcastable, name=None)
dtype: str
:对应于numpy
中的类型broadcastable: tuple, list, or array of boolean values
:如果是True
表示该维的维度只能为 1;长度表示符号变量的维度。
pattern | interpretation |
---|---|
[] | scalar |
[True] | 1D scalar (vector of length 1) |
[True, True] | 2D scalar (1x1 matrix) |
[False] | vector |
[False, False] | matrix |
[False] * n | nD tensor |
[True, False] | row (1xN matrix) |
[False, True] | column (Mx1 matrix) |
[False, True, False] | A Mx1xP tensor (a) |
[True, False, False] | A 1xNxP tensor (b) |
[False, False, False] | A MxNxP tensor (pattern of a + b) |
产生一个五维的变量类型:
In [4]:
dtensor5 = T.TensorType('float64', (False,)*5)
x = dtensor5()
变量方法
.dim
维度:
In [5]:
print x.ndim
5
.type
类型:
In [6]:
print x.type
TensorType(float64, 5D)
.dtype
包含的变量类型:
In [7]:
print x.dtype
float64
.reshape
传入一个变量对 x 进行 reshape
,通常需要指定 shape
的 ndim
:
In [8]:
shape = T.ivector("shape")
y = x.reshape(shape, ndim=3)
y
是 x
的一个 view
:
In [9]:
print x.ndim, y.ndim
5 3
.dimshuffle
dimshuffle
改变维度的顺序,返回原始变量的一个 view
:
输入是一个包含 0,1,...,ndim-1
和任意数目的 'x'
的组合:
例如:
('x')
:将标量变成 1 维数组(0, 1)
:与原始的 2 维数组相同(1, 0)
:交换 2 维数组的两个维度,形状从N × M
变M × N
('x', 0)
:形状从N
变成1 × N
(0, 'x')
:形状从N
变成N × 1
(2, 0, 1)
: 形状从A × B × C
变成C × A × B
(0, 'x', 1)
: 形状从A × B
变成A × 1 × B
(1, 'x', 0)
: 形状从A × B
变成B × 1 × A
(1,)
: 将第 0 维除去,除去的维度的大小必须为 1。形状从1 × A
变成A
In [10]:
z = y.dimshuffle(("x", 1, 2, 0))
print z
print z.ndim
DimShuffle{x,1,2,0}.0
4
.flatten
flatten(ndim=1)
返回原始变量的一个 view
,将变量降为 ndim
维:
In [11]:
z = x.flatten(ndim=2)
print z.ndim
2
.ravel
与 flatten
一样。
.T
转置,注意,一维数组或者变量的转置是其本身,要想将行列向量互相转换,需要使用 reshape
或者 dimshuffle
。
其他方法
In [12]:
print filter(lambda t: t.isalpha(), dir(x))
['T', 'all', 'any', 'arccos', 'arccosh', 'arcsin', 'arcsinh', 'arctan', 'arctanh', 'argmax', 'argmin', 'argsort', 'astype', 'broadcastable', 'ceil', 'choose', 'clip', 'clone', 'compress', 'conj', 'conjugate', 'copy', 'cos', 'cosh', 'cumprod', 'cumsum', 'diagonal', 'dimshuffle', 'dot', 'dtype', 'eval', 'exp', 'fill', 'flatten', 'floor', 'imag', 'index', 'log', 'max', 'mean', 'min', 'name', 'ndim', 'nonzero', 'norm', 'owner', 'prod', 'ptp', 'ravel', 'real', 'repeat', 'reshape', 'round', 'shape', 'sin', 'sinh', 'size', 'sort', 'sqrt', 'squeeze', 'std', 'sum', 'swapaxes', 'tag', 'take', 'tan', 'tanh', 'trace', 'transpose', 'trunc', 'type', 'var']
模块函数
为了与 numpy
兼容,tensor
T.shape
shape(x)
返回一个存储变量 x
形状的变量:
In [13]:
print T.shape(x)
Shape.0
T.shape_padleft, T.shape_padright
在最左边/右边加上 n 个大小为 1 的 1 个维度:
In [14]:
x = T.tensor3()
print T.shape_padleft(x)
print T.shape_padright(x)
DimShuffle{x,0,1,2}.0
DimShuffle{0,1,2,x}.0
T.shape_padaxis
在指定位置插入大小为 1 的 1 个维度:
In [15]:
print T.shape_padaxis(x, 1)
print T.shape_padaxis(x, 0)
print T.shape_padaxis(x, -1)
DimShuffle{0,x,1,2}.0
DimShuffle{x,0,1,2}.0
DimShuffle{0,1,2,x}.0
插入这些大小为 1
的维度,主要目的是 broadcast
化。
T.unbroadcast
可以使用 unbroadcast(x, *axes)
使得 x
的某些维度不可 broadcast
。
T.tile
tile(x, reps)
按照规则重复 x
产生张量
T.zeros_like(x), T.ones_like(x)
产生一个与 x 形状相同的全 0 或全 1 变量
T.fill(a, b)
使用 b
的值去填充 a
,b
是一个数值或者 theano scalar
。
T.alloc(value, *shape)
返回指定形状的变量,并初始化为 value
T.eye(n, m=None, k=0, dtype=theano.config.floatX)
单位矩阵
T.basic.choose(a, choices)
a
是一个 index
数组变量,对应于 choices
中的位置。
降维
T.max(x), T.argmax(x), T.max_and_argmax(x)
最大值,最大值位置,最大值和最大值位置。
T.min(x), T.argmin(x)
最小值,最小值位置。
T.sum(x), T.prod(x), T.mean(x), T.var(x), T.std(x)
和,积,均值,方差,标准差
T.all(x), T.any(x)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论