我想将一个2d数组的列表示为另一个矩阵的列子集的总和。什么是最有效的方式?
现在,我所做的是,
for i in xrange(U.shape[1])
U[:,i] = X[:,np.random.choice(X.shape[1], 10)].sum(axis=1)/10.0;
是否有更快更好的非循环方法?
答案 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