在Python中将向量堆叠到矩阵中的快速方法

时间:2018-03-15 16:58:33

标签: python loops numpy matrix vector

我希望将相同lentgh(500)的100k向量堆叠到python中的单个矩阵中,但这需要花费太多时间。

这是我的代码:

stacked = all_vectors[0]
for i in range(1,100000):
    stacked = np.column_stack((stacked ,all_vectors[i]))

你知道怎么做得更快吗?

1 个答案:

答案 0 :(得分:2)

你应该得到你想要的答案

stacked = np.column_stack(all_vectors[:100000])

这与

之间似乎没有区别
stacked = np.array(all_vectors[:100000]).transpose()

从这个互动环节可以看到:

>>> stacked = np.column_stack(all_vectors[:100000])
>>> sstacked = np.array(all_vectors[:100000]).transpose()
>>> stacked == sstacked
array([[ True,  True,  True, ...,  True,  True,  True],
       [ True,  True,  True, ...,  True,  True,  True],
       [ True,  True,  True, ...,  True,  True,  True],
       ...,
       [ True,  True,  True, ...,  True,  True,  True],
       [ True,  True,  True, ...,  True,  True,  True],
       [ True,  True,  True, ...,  True,  True,  True]], dtype=bool)
>>> (stacked == sstacked).all()
True

编辑:时间结果似乎更喜欢第二种方法:

%%timeit
vector = list(range(1, 1+10))
all_vectors = [vector] *100_000
result = np.column_stack(all_vectors)

396 ms ± 18.4 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%%timeit
vector = list(range(1, 1+10))
all_vectors = [vector] *100_000
result = np.array(all_vectors)
np.array(all_vectors[:100000]).transpose()

152 ms ± 3.16 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)