【发布时间】:2017-02-02 20:46:18
【问题描述】:
假设我有一个大小为 5 x 4 的矩阵 A,还有一个长度为 5 的向量 b,其元素表示我在矩阵 A 的相应行中需要多少个值。这意味着b 中的每个值的上限是A 的第二维大小。我的问题是如何在给定向量的情况下制作矩阵的切片,这是通过编写vector[:n]
例如,这可以通过循环 A 的行来实现:
import numpy
A=numpy.arange(20).reshape((5,4))
b=numpy.array([0, 3, 3, 2, 3])
output=A[0, :b[0]]
for i in xrange(1, A.shape[0]):
output=numpy.concatenate((output, A[i, :b[i]]), axis=0)
# output is array([ 4, 5, 6, 8, 9, 10, 12, 13, 16, 17, 18])
当处理一个非常大的数组时,这个循环的计算效率可能相当低。此外,我的目的是最终在没有scan 操作的情况下在 Theano 中应用它。我想避免使用循环在给定向量的情况下制作切片。
【问题讨论】:
标签: performance numpy indexing vectorization matrix-indexing