【发布时间】:2016-10-13 07:19:07
【问题描述】:
由于我需要在特定轴上重复,我想尽可能避免不必要的内存重新分配。
例如,给定一个形状为 (3, 4, 5) 的 numpy 数组 A,我想在原始 A 上创建一个形状为 (3, 4, 100, 5) 的名为 B 的视图. A 的第 3 轴重复 100 次。
在numpy中,可以这样实现:
B=numpy.repeat(A.reshape((3, 4, 1, 5)), repeats=100, axis=2)
或:
B=numpy.broadcast_to(A.reshape((3, 4, 1, 5)), repeats=100, axis=2)
前者分配一个新内存,然后做一些复制工作,而后者只是在A 上创建一个视图,而不需要额外的内存重新分配。这可以通过答案Size of numpy strided array/broadcast array in memory?中描述的方法来识别。
然而,在 theano 中,theano.tensor.repeat 似乎是唯一的方法,当然它不是更可取的。
我想知道是否有 `numpy.broadcast_to' 之类的 theano 方法可以有效地做到这一点?
【问题讨论】: