首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将一组numpy数组合并为一个数组(快速)

将一组numpy数组合并为一个数组(快速)
EN

Stack Overflow用户
提问于 2011-05-17 20:42:16
回答 1查看 25K关注 0票数 25

如果知道列表的长度和数组的大小,那么将numpy数组的列表合并为一个数组的最快方法是什么,这对所有人都是一样的?

我尝试了两种方法:

来自Pythonic way to create a numpy array from a list of numpy arrays and

  • vstack

  • merged_array = array(list_of_arrays)

A你可以看到vstack更快,但由于某些原因,第一次运行花费的时间是第二次的三倍。我认为这是由(缺少) preallocation引起的。那么,我如何为vstack预分配数组呢?或者你知道一个更快的方法吗?

谢谢!

更新

我想要的是(25280, 320) (80, 320, 320)而不是 merged_array = array(list_of_arrays),也就是说,不适合我。感谢Joris指出这一点!

输出:

代码语言:javascript
复制
0.547468900681 s merged_array = array(first_list_of_arrays)
0.547191858292 s merged_array = array(second_list_of_arrays)
0.656183958054 s vstack first
0.236850976944 s vstack second

代码:

代码语言:javascript
复制
import numpy
import time
width = 320
height = 320
n_matrices=80

secondmatrices = list()
for i in range(n_matrices):
    temp = numpy.random.rand(height, width).astype(numpy.float32)
    secondmatrices.append(numpy.round(temp*9))

firstmatrices = list()
for i in range(n_matrices):
    temp = numpy.random.rand(height, width).astype(numpy.float32)
    firstmatrices.append(numpy.round(temp*9))


t1 = time.time()
first1=numpy.array(firstmatrices)
print time.time() - t1, "s merged_array = array(first_list_of_arrays)"

t1 = time.time()
second1=numpy.array(secondmatrices)
print time.time() - t1, "s merged_array = array(second_list_of_arrays)"

t1 = time.time()
first2 = firstmatrices.pop()
for i in range(len(firstmatrices)):
    first2 = numpy.vstack((firstmatrices.pop(),first2))
print time.time() - t1, "s vstack first"

t1 = time.time()
second2 = secondmatrices.pop()
for i in range(len(secondmatrices)):
    second2 = numpy.vstack((secondmatrices.pop(),second2))

print time.time() - t1, "s vstack second"
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6030906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档