动态创建动态2D numpy数组

时间:2012-03-19 18:51:50

标签: python numpy

我很难动态创建numpy 2D数组。

所以基本上我有一个像这样的for循环。

for ele in huge_list_of_lists:
   instance = np.array(ele) 

创建此列表的1D numpy数组,现在我想将它附加到numpy数组,所以基本上将列表列表转换为数组数组?

我检查了手册..和np.append()方法不起作用np.append()工作,它需要两个参数才能将它们附加在一起。

任何线索?

3 个答案:

答案 0 :(得分:6)

预先创建2D数组,并在循环时填充行:

my_array = numpy.empty((len(huge_list_of_lists), row_length))
for i, x in enumerate(huge_list_of_lists):
    my_array[i] = create_row(x)

其中create_row()返回长度为row_length的列表或1D NumPy数组。

根据create_row()的作用,可能有更好的方法可以完全避免Python循环。

答案 1 :(得分:4)

只需将列表列表传递给numpy.array,请记住numpy数组是ndarrays,因此列表列表的概念不会转换为数组的数组,而是转换为2d阵列。

>>> import numpy as np
>>> a = [[1., 2., 3.], [4., 5., 6.]]
>>> b = np.array(a)
>>> b
array([[ 1.,  2.,  3.],
       [ 4.,  5.,  6.]])
>>> b.shape
(2, 3)

此外,ndarrays具有nd-indexing,因此[1][1]在numpy中变为[1, 1]

>>> a[1][1]
5.0
>>> b[1, 1]
5.0

我误解了你的问题吗?

你挑衅地不想使用numpy.append来做这样的事情。请记住,numpy.append有O(n)运行时间,所以如果你调用它n次,对于你的数组的每一行,你最终得到一个O(n ^ 2)算法。如果您需要在知道所有内容之前创建数组,但是您知道最终大小,最好使用numpy.zeros(shape, dtype)创建一个数组并在以后填写它。类似于斯文的回答。

答案 2 :(得分:2)

import numpy as np

ss = np.ndarray(shape=(3,3), dtype=int);

array([[              0, 139911262763080, 139911320845424],
   [       10771584,        10771584, 139911271110728],
   [139911320994680, 139911206874808,              80]]) #random

numpy.ndarray函数实现了这一点。 numpy.ndarray