Numpy将2d数组的列指定为另一个数组的索引列的总和

时间:2018-02-22 07:29:10

标签: python arrays python-2.7 numpy vectorization

我想将一个2d数组的列表示为另一个矩阵的列子集的总和。什么是最有效的方式?

现在,我所做的是,

for i in xrange(U.shape[1])
    U[:,i] = X[:,np.random.choice(X.shape[1], 10)].sum(axis=1)/10.0;

是否有更快更好的非循环方法?

1 个答案:

答案 0 :(得分:2)

一次生成所有索引,索引输入2D数组以给我们一个3D数组,最后沿最后一个轴indx = np.random.randint(0,X.shape[1], (U.shape[1],10)) Uout = X[:,indx].sum(axis=2)/10.0 求和,就像这样 -

np.random.choice

如果您想使用indx获取np.random.choice(X.shape[1], size=(U.shape[1],10)) -

np.take

对于大型数组,In [63]: X = np.random.rand(1000,1000) In [64]: indx = np.random.randint(0,1000, (1000,10)) In [67]: %timeit X[:,indx] 10 loops, best of 3: 69.9 ms per loop In [68]: %timeit np.take(X, indx, axis=1) 10 loops, best of 3: 22.9 ms per loop 的索引似乎更快 -

EXECUTE