我在循环中生成一维numpy数组的列表,然后将该列表转换为2d numpy数组。如果我提前知道项目的数量,我会预先分配一个2d numpy数组,但我不知道,因此我把所有的东西都放在一个列表中。
模型如下:
>>> list_of_arrays = map(lambda x: x*ones(2), range(5))
>>> list_of_arrays
[array([ 0., 0.]), array([ 1., 1.]), array([ 2., 2.]), array([ 3., 3.]), array([ 4., 4.])]
>>> arr = array(list_of_arrays)
>>> arr
array([[ 0., 0.],
[ 1., 1.],
[ 2., 2.],
[ 3., 3.],
[ 4., 4.]])
我的问题是:
有没有更好的方法(性能)来完成收集顺序数字数据(在我的例子中是numpy数组)的任务,而不是将它们放入一个列表中,然后从中生成numpy.array(我正在创建一个新的obj并复制数据)?在一个测试良好的模块中是否有一个“可扩展”的矩阵数据结构?
我的二维矩阵的典型大小是100x10到5000x10个浮点数
编辑:在本例中,我使用的是map,但在实际应用程序中,我有一个for循环
假设您知道最终数组
arr
永远不会大于5000x10。 然后,您可以预先分配一个最大大小的数组,并将数据填充为 通过循环,然后使用arr.resize
将其缩减为 退出循环后发现大小。下面的测试表明这样做比构建中间 不管数组的最终大小如何,python都会列出。
另外,
arr.resize
取消分配未使用的内存,因此最终(虽然可能不是中间)内存占用比python_lists_to_array
使用的内存占用更小。这表明
numpy_all_the_way
速度更快:这表明
numpy_all_the_way
使用更少的内存:测试.py:
甚至比@Gill Bates的答案还要简单,这里有一行代码:
方便的方式,使用^{} 。我相信这比@unutbu的答案还要快:
相关问题 更多 >
编程相关推荐