我很难动态创建numpy
2D数组。
所以基本上我有一个像这样的for循环。
for ele in huge_list_of_lists:
instance = np.array(ele)
创建此列表的1D numpy数组,现在我想将它附加到numpy数组,所以基本上将列表列表转换为数组数组?
我检查了手册..和np.append()
方法不起作用np.append()
工作,它需要两个参数才能将它们附加在一起。
任何线索?
答案 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